【问题标题】:filter for value on groups data.table [duplicate]过滤组data.table上的值[重复]
【发布时间】:2018-11-16 13:57:27
【问题描述】:

我希望过滤 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

没有一个循环,我该如何处理?我更喜欢 data.table 方法。

【问题讨论】:

  • 有什么问题?一切似乎都按预期工作。当您创建数据表时,它的大小为 12(因为 V4),但您有 4 个随机值和 3 个字母,因此这些值会重复,因此每个字母的最大值将始终相同。

标签: r data.table subset


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认为第二行代码有错字。应该是DT[DT[, .I[which.max(V3)], by = V2]$V1]吧?
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2013-07-01
  • 2018-08-07
  • 2012-08-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多