根据下面的data.table
,我想创建一个新的列,即value
按地区求和,period == 0
。
region period value
1: US 0 10
2: US 1 11
3: Japan 0 12
4: Japan 1 13
这种方法的典型data.frame
方法是创建一个单独的框架,按周期过滤,按区域求和,然后以region
作为关键字与原始框架合并。我想知道data.table
使用data.table
groupby synytax是否存在单线方法。我最接近的是下面的两线方法。
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
答案 0 :(得分:4)
我不确定这是否是“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
答案 1 :(得分:2)
我更喜欢阿南达的方式,但这里有另一种选择:
x1[x1[period==0,sum(value),by=region], value0 := V1, on="region", by=.EACHI]
答案 2 :(得分:0)
这使得分组范围更明确......
> x1[,value0:=.SD[period==0,mean(value)],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