我试图将SQL代码转换为R代码.但是,数据大约有3500万条记录,每条记录有200列.所以我能找到的最佳选择是data.table包.
这是问题所在.在SQL代码中,我能够执行这样的操作,
select order_date,sum(case when item in ("D","C","B") then col4 end)as col1
sum(case when item not in ("Z","X","Y") then col4 end) as col2
from datatable
where col3 <25
group by order_date;
Run Code Online (Sandbox Code Playgroud)
以上查询允许我按每个日期分组.我无法在data.table中复制它.我的尝试如下.
grp1<- c("D","C","B")
grp2<- c("Z","X","Y")
d1 <- dat[item %in% grp1,.(col1 = sum(col4,na.rm = TRUE),by = Order_Date]
d2 <- dat[item %in% grp2,.(col2 = sum(col4,na.rm = TRUE),by = Order_Date]
d3 <- data.table(d1,d2)
Run Code Online (Sandbox Code Playgroud)
现在,因为它subsets最初我是分组在不同的两个d1和d2
您可以尝试以下方法:
DT[col3 < 25,
.(col1 = sum(col4[item %in% c("D","C","B")]),
col2 = sum(col4[!item %in% c("Z","X","Y")])),
by = .(order_date)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |