查找组中行的变量值,该变量是分组时另一个变量的最大值

时间:2015-04-17 21:48:25

标签: r data.table

为复杂的头衔道歉。基本上,我正在聚合R.中的一些数据。

df <- data.frame(value1=c(1,2,3,4,5,6,7,8,9,10),
+                  value2=c(2,3,4,5,6,7,8,9,1,2), 
+                  group=c("a","b","a","b","a","b","a","b","a","c")) 
DT <- as.data.table(df)

结果数据如下所示:

 value1 value2  group
    1   2   a
    2   3   b
    3   4   a
    4   5   b
    5   6   a
    6   7   b
    7   8   a
    8   9   b
    9   1   a
    10  2   c

我想使用data.table为具有最高value2的行的每个组找到value1。

例如,上表将变为:

new_val group
7      a
8      b
10     c

...因为7是组a中max value2的行的value1的值,依此类推。

在使用多个分组操作创建新数据表时,我正在非常困难地执行此操作

我目前使用的代码如下:

DT[,list(
    rate_max_acct = max(value1(which.max(value2)))
    ),
  by=group] -> DT2

这不起作用 - 我试图做的是选择每个froup的value2最大的行,然后找到该组的value1的最大值,但它不起作用并抛出以下错误:

  could not find function "value1"

显然,它认为我正在尝试应用函数,而不是寻找对象。

这里的任何帮助都会非常感激,特别是如果我能在这个列表中做到这一点 - 我正在做一堆分组操作,如果我能保持“xxx = yyy”语法,我会非常喜欢它。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

DT[,list(newval=value1[which.max(value2)]), group]
#   group newval
#1:     a      7
#2:     b      8
#3:     c     10

您不需要这么多max(value1[which.max(value2)]),因为which.max会为您提供value2最大的行的索引,您只需要value1[which.max(value2)]

答案 1 :(得分:0)

如果您正在寻找多个最大值,可以简单地扩展到上一个答案。

library(data.table) ; setkey(DT, group)
tmp <- DT[, .(value1[which(value2 == max(value2)), max(value2))], by = group]

这将为您提供三列data.table,第一列为组标识符,第二列为value1达到最大值的所有变量value2,第三列为最高value2group