在R 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)
r<-sapply(split(a.3,a.2),function(x) which.max(x$b.2))
a.3[r,]
返回列表索引,而不是整个data.frame指数在R A组中选择具有可变的最大值的行
我试着去为a.2
每个子组返回b.2
最大价值。我怎样才能有效地做到这一点?
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,]
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
m<-split(a.3,a.2)
u<-function(x){
a<-rownames(x)
b<-which.max(x[,2])
as.numeric(a[b])
}
r<-sapply(m,FUN=function(x) u(x))
a.3[r,]
这虽然有点麻烦,但它有点麻烦......但它允许我抓住组的最大值的行。任何其他想法?
> 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
的ddply
和ave
方法都是相当耗费资源,我想。 ave
由于我目前的问题(67,608行,有四列定义唯一键)而用完内存而失败。 tapply
是一个方便的选择,但我通常需要做的是为每个唯一键(通常由多个列定义)选择具有something-est some-value的所有行。我找到的最佳解决方案是进行排序,然后使用duplicated
的否定来为每个唯一键只选择第一行。对于简单的例子在这里:
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),]
我认为随着ave
或ddply
的性能提升,至少,是巨大的。对于多列键来说它稍微复杂一点,但order
将处理大量的事情,duplicated
可以处理数据帧,所以可以继续使用这种方法。
这是最容易使用的,并且在多列上运行良好 - 您只需在'duplicateated'中使用'cbind'。 – 2013-04-07 09:28:47
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
有了,就可以得到各组的最大在一行:
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
熔体(A.3,ID = C ( “A.2”)) - > H.2; cast(h.2,a.2〜,max) 在这个例子中做了窍门,但是当我将计算机应用到我的原始数据集时,计算机的内存不足。所以没有真正帮助我很多。 – Misha 2010-05-12 20:15:58