2015-10-09 3 views
4

У меня есть две категориальные столбцы (A, B) и числовая колонка (C). Я хочу получить значение A, где C - максимум групп, определенных B. Я ищу решение data.table.data.table индекс второго столбца

library(data.table) 

dt <- data.table(A = c("a","b","c"), 
        B = c("d","d","d"), 
        C = c(1,2,3)) 
dt 
    A B C 
1: a d 1 
2: b d 2 
3: c d 3 

# I want to find the value of A for the maximum value 
# of C when grouped by B 
dt[,max(C), by=c("B")] 
    B V1 
    1: d 3 

#how can I get the A column, value = "c" 

ответ

4

Вы можете использовать which.max найти индекс максимума C и выберите соответствующий элемент в A:

dt[,.(A=A[which.max(C)]), B] 
# B A 
#1: d c 
+0

приятно! теперь я готовлю газ. – zach

+1

или '. (A = A [who.max (C)])' держать 'A', что соответствует именам ящиков данных в моих реальных данных – zach

5

Другой вариант сортировки по C и просто извлечь уникальные B группы. Это должно быть быстрее для большого набора данных со многими группами, поскольку он не вычисляет максимальные значения для каждой группы, а сортирует только один раз

unique(dt[order(-C)], by = "B") 
# A B C 
# 1: c d 3 
Смежные вопросы