SQL的`case when when ...使用R中的data.table包进行代码转换

Sho*_*anz 6 sql r data.table

我试图将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

jan*_*cki 7

您可以尝试以下方法:

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)