为了账号安全,请及时绑定邮箱和手机立即绑定

按组选择前N个值

按组选择前N个值

Cats萌萌 2019-11-14 15:21:46
这是对r-help邮件列表上询问的问题的答复。这里有很多示例,这些示例如何通过分组使用来查找最高值sql,因此我想可以很容易地使用R sqldf包将这些知识转换为知识。例如:mtcars按分组时cyl,这是的每个不同值的前三条记录cyl。请注意,在这种情况下,不包括领带,但是最好显示一些其他处理领带的方法。                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb ranksToyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1   2.0Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2   1.0Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1   2.0Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4   3.0Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4   1.0Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4   1.5Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4   1.5Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4   3.0如何找到每组的前N个记录(最大或最小)?
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

随便按什么排序(例如,mpg,问题尚不清楚)


mt <- mtcars[order(mtcars$mpg), ]

然后使用by函数获取每组中的前n行


d <- by(mt, mt["cyl"], head, n=4)

如果希望结果为data.frame:


Reduce(rbind, d)

编辑: 处理关系比较困难,但是如果需要所有关系:


by(mt, mt["cyl"], function(x) x[rank(x$mpg) %in% sort(unique(rank(x$mpg)))[1:4], ])

另一种方法是根据其他一些信息(例如,


mt <- mtcars[order(mtcars$mpg, mtcars$hp), ]

by(mt, mt["cyl"], head, n=4)


查看完整回答
反对 回复 2019-11-14
?
catspeake

TA贡献1111条经验 获得超0个赞

dplyr 绝招


mtcars %>% 

arrange(desc(mpg)) %>% 

group_by(cyl) %>% slice(1:2)



 mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb

  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>

1  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1

2  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1

3  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1

4  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4

5  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2

6  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 500 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信