在数据表中筛选分组数值

3

我希望对一个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个字母,因此值将重复出现,使得每个字母的最大值始终相同。 - Luis
1个回答

2
我们可以创建一个行索引来对数据集进行子集操作。
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],对吗? - otwtm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接