【发布时间】:2015-06-08 20:41:36
【问题描述】:
我知道如何使用 plyr (ddply) 提取前 N 个值,如下所示,但这是基于基于一个变量的排序和提取...我想基于两个变量进行提取。我该怎么做?
例如
rats<- read.table("http://vincentarelbundock.github.io/Rdatasets/csv/KMsurv/rats.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
top = ddply(rats, .(litter), function(x) data.frame(reads=tail(sort(x$time),1)))
上面的脚本可以很好地提取每窝的最高值,但是如果我想要通过处理(rx 列)获得每窝的最高值怎么办?
非常感谢任何帮助。
【问题讨论】:
-
只需使用
.(litter, rx)而不是.(litter) -
看起来所有的窝都有一个 1 和两个 0 rx,所以你可以像这样排序和索引:
o <- rats[with(rats, order(litter, rx, time)), ]; o[rep(c(FALSE, TRUE, TRUE), 50), ] -
@rawr 这是给定现有代码的最直接答案 - 作为答案发布以便我可以投票?
-
我在发布之前尝试了上面的 rwar 答案,但没有成功。这就是我寻找不同方法的原因。
-
我试过了,效果很好,怎么不适合你