给定一个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)
我不确定这是否是“ 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)