在r中选择组内变量值最大的行 a.2a.2>a.2 b.2 t最大值(b.2,a.2,最大值) 1 2 3 4 5 6 7 8 9 10 99 92 96 97 98 99 94 98 98 96 a.2

在r中选择组内变量值最大的行 a.2a.2>a.2 b.2 t最大值(b.2,a.2,最大值) 1 2 3 4 5 6 7 8 9 10 99 92 96 97 98 99 94 98 98 96 a.2,r,groupwise-maximum,R,Groupwise Maximum,我认为ddply和ave方法都是资源密集型的ave由于当前问题的内存不足而失败(67608行,四列定义唯一键)tapply是一个方便的选择,但我通常需要做的是为每个唯一键(通常由多个列定义)选择具有某个值的所有整行。我找到的最佳解决方案是进行排序,然后使用duplicated的否定来为每个唯一键仅选择第一行。对于此处的简单示例: library(plyr) ddply(a.3, "a.2", subset, b.2 == max(b.2)) a 这将产生以下输出: aggregate(a.3,

我认为
ddply
ave
方法都是资源密集型的
ave
由于当前问题的内存不足而失败(67608行,四列定义唯一键)
tapply
是一个方便的选择,但我通常需要做的是为每个唯一键(通常由多个列定义)选择具有某个值的所有整行。我找到的最佳解决方案是进行排序,然后使用
duplicated
的否定来为每个唯一键仅选择第一行。对于此处的简单示例:

library(plyr)
ddply(a.3, "a.2", subset, b.2 == max(b.2))
a
这将产生以下输出:

aggregate(a.3, by = list(a.3$a.2), FUN = max)

熔体(a.3,id=c(“a.2”)->h.2;cast(h.2,a.2~,max)实现了本例中的技巧,但当我将其应用于原始数据集时,计算机内存不足。所以我并没有帮我什么忙。我必须承认,这要简单得多。。然而==b.2背后的逻辑超出了我的理解范围……ave生成一个向量,它只包含每个a.2的最大值b.2。因此,其中it==b.2,只要数据帧有行,就设置真值。您正在使用逻辑向量选择数据帧中的行。如果您想了解它的工作情况,请将ave命令的结果添加到数据帧中,并查看它,与b.2列(a.3$b.max)相比,我尝试使用ddply函数,但速度非常慢。我没有计时,但它持续了一段时间,还去了一趟洗手间,而ave版本在我的原始数据集中只使用了.2秒(210col*16000行)。这将在下一个版本中修复。但除非你提供一个现实的例子,否则你不能期望得到与你的数据相关的答案!这是最容易使用的,并且在多个列上非常有效——您只需在
复制的
中使用
cbind
> a.2<-sample(1:10,100,replace=T)
> b.2<-sample(1:100,100,replace=T)
> tapply(b.2, a.2, max)
 1  2  3  4  5  6  7  8  9 10 
99 92 96 97 98 99 94 98 98 96 
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
sel <- ave(b.2, a.2, FUN = max) == b.2
a.3[sel,]
library(plyr)
ddply(a.3, "a.2", subset, b.2 == max(b.2))
a <- sample(1:10,100,replace=T)
b <- sample(1:100,100,replace=T)
f <- data.frame(a, b)

sorted <- f[order(f$a, -f$b),]
highs <- sorted[!duplicated(sorted$a),]
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
aggregate(a.3, by = list(a.3$a.2), FUN = max)
   Group.1 a.2 b.2
1        1   1  96
2        2   2  82
...
8        8   8  85
9        9   9  93
10      10  10  97