我有一个包含以下内容的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
有什么问题?我该如何解决?
答案 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)]