为复杂的头衔道歉。基本上,我正在聚合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”语法,我会非常喜欢它。
答案 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
,第三列为最高value2
每group
。