根据某些条件分配R dataFrame单元格的内容

时间:2016-02-23 18:25:52

标签: r

我有一个包含以下内容的R DataFrame df:

Serial N         year         current
   B              10            14
   B              10            16
   C              12            11
   D              40            20
   B              11            15
   C              12             9

我想添加一个列来计算平均电流,如果序列号和年份是相同的序列号和年份。  我想有这样的东西

Serial N         year         current    Average 
   B              10            14          15
   B              10            16          15
   C              12            13          12
   D              40            20          20
   B              11            15          15
   C              12            11          12

我写了这个

for (i in unique(df$Serial_N))
   {
       for (j in unique (df$year))
         {  data=subset(df,Serial_N==i & year==j)   
            df$Average<-mean(data$current)  
          }
    }     

当我运行它时,我有以下错误

Error in `$<-.data.frame`(`*tmp*`, "Average", value = NaN) : 
replacement has 1 row, data has 0 

有什么问题?我该如何解决?

1 个答案:

答案 0 :(得分:1)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df)),按&#39; SerialN&#39;和&#39;年&#39;分组,我们得到当前&#39;的mean并将其分配到新列&#39;平均&#39;。

library(data.table)
setDT(df)[, Average := mean(current) ,.(SerialN, year)]