【问题标题】:data.table group by with a filter condition [duplicate]带有过滤条件的data.table分组[重复]
【发布时间】:2013-11-16 16:45:24
【问题描述】:

给定一个像下面这样的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 语法的单行方法。我最接近的是下面的两行方法。

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

【问题讨论】:

    标签: r data.table


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我更喜欢 Ananda 的方式,但这里有另一种选择:

      x1[x1[period==0,sum(value),by=region], value0 := V1, on="region", by=.EACHI]
      

      【讨论】:

        【解决方案3】:

        这使得分组范围更明确...

        > 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 
        

        【讨论】:

        • 请注意,.SD 尚未针对 .SD[x == .] 进行优化。这会慢得多(尝试更大的数据)。此外,OP 的要求是 sum,而不是 mean (IIUC)。
        猜你喜欢
        • 1970-01-01
        • 2018-11-16
        • 2021-11-25
        • 2022-01-09
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多