代码之家  ›  专栏  ›  技术社区  ›  Todd Shannon

筛选组上的值数据表[副本]

  •  1
  • Todd Shannon  · 技术社区  · 7 年前

    我在找一个过滤器 data.table 对于组的最大值。

    DT <- data.table(V1 = c(1L, 2L),
                     V2 = LETTERS[1:3],
                     V3 = round(rnorm(4), 4),
                     V4 = 1:12)
    
     V1 V2     V3     V4
     1:  1  A -0.1346  1
     2:  2  A  0.2309  4
     3:  1  A  0.7067  7
     4:  2  A -1.0082 10
     5:  2  B -1.0082  2
     6:  1  B -0.1346  5
     7:  2  B  0.2309  8
     8:  1  B  0.7067 11
     9:  1  C  0.7067  3
    10:  2  C -1.0082  6
    11:  1  C -0.1346  9
    12:  2  C  0.2309 12
    

    我试过了,但没用:

    DT[,max(V3), by =.(V2)]
    
       V2     V1
    1:  A 1.2281
    2:  B 1.2281
    3:  C 1.2281
    

    如果没有一个循环,我将如何处理这个问题?我更喜欢一个数据表方法。

    1 回复  |  直到 7 年前
        1
  •  1
  •   akrun    5 年前

    我们可以创建一个行索引来子集数据集

    DT[DT[, .I[V3 == max(V3)], by = V2]$V1]
    

    如果每个“V2”只有一个max元素

    DT[DT[, .I[which.max(V3)], by = V2]$V1]