我在R中遇到以下问题:
让我们假设以下数据框:
a b c d e
1 1 1 1 1 15.5
2 1 1 1 2 8.3
3 1 1 2 1 12.4
4 1 1 2 2 3.2
...
我想将一个函数f(x,y)
应用于列e
中的数字,其中x和y是从除d
之外的所有列中具有相同值的两行中绘制的(当然还有e
。
输出应该是一个新的数据框,其中列d
被删除(因为“合并”使该列无关),列e
是应用函数的结果。
因此,在上面的示例中,假设f(x,y)
是加法,新数据框应如下所示:
a b c e
1 1 1 1 23.8
3 1 1 2 15.6
...
到目前为止,我所尝试的内容看起来如下,感觉非常不优雅:
data.d1 <- subset(data, d==1)
for (index in 1:nrow(data.d1))
row1 <- data.d1[index,]
row2 <- data[data$a==row1$a & data$b==row1$b & data$c==row1$c & data$d==2,]
data[index,"e"] <- f(row1$e, row2$e)
}
data <- data[-match(c("d"), names(data))]
使用apply()
之类的人有更清洁的解决方案吗?
提前谢谢!
答案 0 :(得分:4)
这里有例子:
d> ddply(x, .(a, b, c), summarize, e = sum(e))
a b c e
1 1 1 1 23.8
2 1 1 2 15.6
d> aggregate(e~a+b+c, sum, data = x)
a b c e
1 1 1 1 23.8
2 1 1 2 15.6
ddply
是plyr
包中的函数。