将函数应用于具有来自其他行的值的列

时间:2012-03-06 17:20:57

标签: r

我在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()之类的人有更清洁的解决方案吗? 提前谢谢!

1 个答案:

答案 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

ddplyplyr包中的函数。