带有过滤条件的data.table group by

Abi*_*iel 3 r data.table

给定一个data.table类似下面的内容,我想创建一个新列,该列是value按地区和where求和的period == 0

   region period value
1:     US      0    10
2:     US      1    11
3:  Japan      0    12
4:  Japan      1    13
Run Code Online (Sandbox Code Playgroud)

典型的data.frame方法是创建一个单独的帧,按周期过滤,按区域求和,然后将其与原始帧合并region为键。我想知道在data.table使用data.tablegroupby语法时是否有单行方法。我最接近的是下面的两行方法。

x1 <- data.table(
  region=c("US","US","Japan","Japan"),
  period=c(0,1,0,1),
  value=10:13)

x1[period==0,value0:=sum(value),by=region]
x1[,value0:=min(value0,na.rm=T),by=region]


   region period value value0
1:     US      0    10     10
2:     US      1    11     10
3:  Japan      0    12     12
4:  Japan      1    13     12
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 5

我不确定这是否是“ data.table” 方式,但是您可以尝试执行以下操作:

x1[, value0 := sum(value[period == 0]), by = region]
x1
#    region period value value0
# 1:     US      0    10     10
# 2:     US      1    11     10
# 3:  Japan      0    12     12
# 4:  Japan      1    13     12
Run Code Online (Sandbox Code Playgroud)