为每个组设置前n行的数据框,并按变量排序

kar*_*los 8 group-by r plyr data.table

我想为n行的数据框子集,这些行按变量分组,并按另一个变量降序排序.这将是一个明确的例子:

    d1 <- data.frame(Gender = c("M", "M", "F", "F", "M", "M", "F", 
  "F"), Age = c(15, 38, 17, 35, 26, 24, 20, 26))
Run Code Online (Sandbox Code Playgroud)

我希望得到2行,每行按年龄排序,每个性别.所需的输出是:

Gender  Age  
F   35  
F   26  
M   38  
M   26  
Run Code Online (Sandbox Code Playgroud)

我在这里寻找订单,排序和其他解决方案,但找不到合适的解决方案来解决这个问题.我感谢您的帮助.

Cha*_*ase 13

一个解决方案使用ddply()fromplyr

require(plyr)
ddply(d1, "Gender", function(x) head(x[order(x$Age, decreasing = TRUE) , ], 2))
Run Code Online (Sandbox Code Playgroud)


Woj*_*ala 6

使用data.table包

require(data.table)
dt1<-data.table(d1)# to speedup you can add setkey(dt1,Gender)
dt1[,.SD[order(Age,decreasing=TRUE)[1:2]],by=Gender]
Run Code Online (Sandbox Code Playgroud)

  • 而不是`order(Age,decrease = TRUE)`可以写`order(-Age)`.这样你就可以按不同的方向排列几列; 例如,`order(-Age,+ Height,-Weight)`. (7认同)