【发布时间】:2016-07-07 18:30:19
【问题描述】:
我是 R 和 data.tables 的初学者,但我已经阅读了足够多的内容,确信它们在处理大型数据集时的速度/效率。我到处搜索,但找不到我认为很简单的问题的答案。
问题来了:给定两个数据表 DT1 和 DT2
DT1 <- data.table(AA=c("A","B","C","A","B","C","A","B","C","A","B","C"),
BB=c(35,45,25,25,85,15,55,55,95,35,25,75)
)
DT2 <- data.table(CC=c("A","B","C","A","B","C"),
DD=c(10,20,30,40,50,60),
EE=c(5,5,10,10,15,20)
)
在给定 DT1 每一行的现有值的情况下,如果满足多个条件,我如何向 DT1 添加一个新列(称为 NewCol),该列对 DT2 中的 EE 列求和:
1) AA 列 = CC 列
2) DD 列 >= BB 列
换句话说,总和 EE,其中 AA = CC AND DD >= BB。
想要的输出是:
DT1_DesiredOutput <- data.table(AA=c("A","B","C","A","B","C","A","B","C","A","B","C"),
BB=c(35,45,25,25,85,15,55,55,95,35,25,75),
NewCol=c(10,15,30,10,0,30,0,0,0,10,15,0)
)
加入?合并?放?还有什么?猜测循环遍历 DT1 的每一行效率低吗?
我还想知道如何使其可扩展,即添加几个条件(例如,多个大于、小于、等于混合“AND”和“OR”的值)。
非常感谢!
p.s.,这是 Excel 中的小菜一碟(我知道 咳嗽 次优),使用数组公式,例如
{=SUM(IF( ($F$7:$F$12=B7)*($G$7:$G$12>C7), $H$7:$H$12))}
复制到 NewCol 的每个单元格中。我不想用两张 Excel 表格把帖子弄得乱七八糟,显然 Excel 不是很好,原因有很多,但如果在 Excel 中那么容易,在 R data.tables 中一定也比较容易,对吧?
【问题讨论】:
标签: r data.table