第二列的data.table索引

时间:2015-10-09 16:28:58

标签: r data.table

我有两个分类列(A,B)和数字列(C)。我想获得A的值,其中C是B定义的组的最大值。我正在寻找一个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"

2 个答案:

答案 0 :(得分:5)

另一种选择是按C排序,只提取唯一的B组。对于具有多个组的大数据集,这应该更快,因为它不计算每组的最大值,而只是排序一次

unique(dt[order(-C)], by = "B")
#    A B C
# 1: c d 3

答案 1 :(得分:4)

您可以使用which.max查找C的最大值索引,并在A中选择相应的元素:

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