Multiple data.frame subgroups processing
我需要处理三个包含按名称索引的相同子组的数据帧。也就是说,第一个数据帧 df1 看起来像这样:
1 2 3 4 5 | Name col1 col2 Car 94.56 1 Car 52.67 2 Bike 421.5 2 Bike 34.56 4 |
df2 和 df3 具有相同的 Name 列,具有相同的值,只是不同的列。我需要为每个不同的名称处理 3 个数据框中的所有行。到目前为止,我一直在使用这种方法:
1 2 3 4 5 6 7 | results = data.frame(name = factor("dummy"), col1 = 1, col2 = 2) for( name in df1$Name ) { new.results = process(name, df1[df1$Name == name, ], df2[df2$Name == name, ], df3[df3$Name == name, ] results = rbind(results, new.results) } return(results) |
这里 process() 返回另一个数据帧,其中包含一些计算的结果。这段代码的问题是 process() 必须返回与 \\'results\\' 数据框相同的布局。如果我更改 process() 返回的内容,我还必须更改 \\'results\\'。还必须删除结果数据框中的第一行。
有没有更简单的方法来做到这一点? by() 可以按名称对 1 个数据帧进行分组,并为每个子组调用 process(),但我不能传入 df2 和 df3 子组。
我会看看 wickham 的 ddply 和 plyr。他们听起来很不错,你的盟友。
http://svitsrv25.epfl.ch/R-doc/library/plyr/html/ddply-5k.html
基本思想是根据标准分割数据框。在您的情况下使用唯一名称,对每个组应用一个函数(像 sum 这样的罐装 R 函数或自定义的自制函数),然后将它们全部缝合在一起。
我不太了解不同的数据帧,但您可能会发现
然后用
这种组合非常有用。祝你好运。