Home > Enterprise >  creat a new column and add value to it in R
creat a new column and add value to it in R

Time:06-10

Here's my code:

correlation <- function(dtable){
  # create the column
  dtable[, "correlation"] <- ""
  for (row in 1:nrow(dtable)) {
    #get the correlation for each row
    cor = cor(dtable$wells_per_section[1:row], dtable$section_eur[1:row])
    #store the value to the correlation column
    correlation = cor
  }
}

When I tried with my table it's returning NA, nothing added to the column, what am I missing?

CodePudding user response:

Your function is not assigning the result of the cor() function to the correlation columns, and it is not explicitly returning dtable. Perhaps you can rewrite it, with some changes, as below:

correlation <- function(dtable){
  # create the column
  dtable[, "correlation"] <- NA
  for (row in 1:nrow(dtable)) {
    #get the correlation for each row
    dtable[row,"correlation"] <- cor(dtable$wells_per_section[1:row], dtable$section_eur[1:row])
  }
  return(dtable)
}

If of interest, you can acheive the same like this:

dtable["correlation"] = sapply(1:nrow(dtable),\(i) cor(dtable[1:i,1], dtable[1:i,2]))

Update

The OP now wants to do correlation separately by groups of 16 rows.

I think the way to approach this is to making a grouping variable using sort(rep(..., length.out=..)) as below, and then apply a simple function by this group..

f <- function(w,s) {
  sapply(seq_along(w), \(i) cor(w[1:i],s[1:i]))
}

dtable %>% 
  group_by(grp = sort(rep(1:16, length.out=250))) %>% 
  mutate(correlation = f(wells_per_section,section_eur))
  • Related