以下是一个示例数据框:

d <- data.frame(
  x   = runif(90),
  grp = gl(3, 30)
) 

我想要d的子集,包含前5个值为x的行,每个值为grp.

使用base-R,我的方法如下:

ordered <- d[order(d$x, decreasing = TRUE), ]    
splits <- split(ordered, ordered$grp)
heads <- lapply(splits, head)
do.call(rbind, heads)
##              x grp
## 1.19 0.8879631   1
## 1.4  0.8844818   1
## 1.12 0.8596197   1
## 1.26 0.8481809   1
## 1.18 0.8461516   1
## 1.29 0.8317092   1
## 2.31 0.9751049   2
## 2.34 0.9269764   2
## 2.57 0.8964114   2
## 2.58 0.8896466   2
## 2.45 0.8888834   2
## 2.35 0.8706823   2
## 3.74 0.9884852   3
## 3.73 0.9837653   3
## 3.83 0.9375398   3
## 3.64 0.9229036   3
## 3.69 0.8021373   3
## 3.86 0.7418946   3

使用dplyr,我希望它能起作用:

d %>%
  arrange_(~ desc(x)) %>%
  group_by_(~ grp) %>%
  head(n = 5)

但它只返回前5行.

headtop_n可以得到全部d.

d %>%
  arrange_(~ desc(x)) %>%
  group_by_(~ grp) %>%
  top_n(n = 5)

如何获得正确的子集?

推荐答案

dplyr 1.0.0中,"slice_min()slice_max() Select 具有变量最小值或最大值的行,从top_n().中 Select "

d %>% group_by(grp) %>% slice_max(order_by = x, n = 5)
# # A tibble: 15 x 2
# # Groups:   grp [3]
#     x grp  
# <dbl> <fct>
#  1 0.994 1    
#  2 0.957 1    
#  3 0.955 1    
#  4 0.940 1    
#  5 0.900 1    
#  6 0.963 2    
#  7 0.902 2    
#  8 0.895 2    
#  9 0.858 2    
# 10 0.799 2    
# 11 0.985 3    
# 12 0.893 3    
# 13 0.886 3    
# 14 0.815 3    
# 15 0.812 3

使用top_n:

?top_n开始,关于wt论点:

用于排序的变量[…]在tbl中为defaults to the last variable".

数据集中的最后一个变量是"grp",它不是您希望排序的变量,这就是为什么您的top_n次try "返回整个d".因此,如果希望在数据集中按"x"排序,则需要指定wt = x.

d %>%
  group_by(grp) %>%
  top_n(n = 5, wt = x)

数据:

set.seed(123)
d <- data.frame(
  x = runif(90),
  grp = gl(3, 30))

R相关问答推荐

按列A中的值进行子集化,并获得列C中对应于R中列B的最大值行的值?使用循环自动化此操作

使用long()在dØr中过滤后获取元素数量

插入指示行之间时间间隔的新行

如何提高以键ID为列的表中键查找的效率?

使用gggplot 2在R中重新调整面板和y轴文本大小

创建重复删除的唯一数据集组合列表

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

MCMC和零事件二元逻辑回归

名称输出pmap on tible

在R中创建一个包含转换和转换之间的时间的列

将年度数据插入月度数据

在某些栏和某些条件下,替换dfs列表中的NA

如何编辑gMarginal背景以匹配绘图背景?

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

按组计算列中1出现的间隔年数

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

如何使用同比折线图中的个别日

在具有多个响应变量的比例堆叠条形图上方添加总计

变长向量的矢量化和

防止正则表达式覆盖以前的语句