Я хочу отфильтровать 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.





Мы можем создать индекс строки для подмножества набора данных
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], да?
В чем проблема? Вроде все работает как задумано. Когда вы создаете свою таблицу данных, она будет иметь размер 12 (из-за V4), но у вас есть 4 случайных значения и 3 буквы, поэтому значения будут повторяться, так что максимум для каждой буквы всегда будет одинаковым.