我刚开始学习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中添加一个名为NewCol的新列,如果满足以下条件,则从DT2中对列EE进行求和:
1. 列AA = 列CC 2. 列DD >= 列BB
换句话说,在AA = CC且DD >= BB的情况下对EE进行求和。
期望的输出结果是:
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数据表中也肯定很容易,对吧?