如何在r中按组选择前n个值


可以使用以下任意方法在R中按组选择前N个值:

方法1:选择每组前N个值(忽略并列)

 library (dplyr)

#select top 5 values by group
df %>% 
  arrange(desc(values_column)) %>% 
  group_by(group_column) %>%
  slice(1:5)

方法二:按组选择前N个值(包括并列)

 library (dplyr)

#select top 5 values by group
df %>%
  group_by(group_column) %>%
  top_n(5, values_column)

以下示例展示了如何在 R 中将每种方法与以下数据帧一起使用:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 points=c(19, 22, 15, NA, 14, 25, 25, 25),
                 rebounds=c(10, 6, 3, 7, 11, 13, 9, 12))

#view data frame
df

  team points rebounds
1 A 19 10
2 to 22 6
3 to 15 3
4 A NA 7
5 B 14 11
6 B 25 13
7 B 25 9
8 B 25 12

示例1:选择每组的前N个值(忽略关系)

以下代码显示如何选择具有最高分值的前 2 行(按团队分组):

 library (dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>% 
  arrange(desc(points)) %>% 
  group_by(team) %>%
  slice(1:2)

# A tibble: 4 x 3
# Groups: team [2]
  team points rebounds
        
1 to 22 6
2 A 19 10
3 B 25 13
4 B 25 9

结果包含每支球队得分最高的两行。

请注意,对于 B 队,实际上有三行与最高点值 ( 25 ) 并列,但输出中仅返回两行。

此方法只是忽略链接。

示例2:选择每组的前N个值(包括平局)

以下代码显示如何选择具有最高分值的前 2 行(按团队分组):

 library (dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>%
  group_by(team) %>%
  top_n(2, dots)

# A tibble: 5 x 3
# Groups: team [2]
  team points rebounds
        
1 A 19 10
2 to 22 6
3 B 25 13
4 B 25 9
5 B 25 12

结果包含每支球队得分最高的两行。

请注意,对于 B 队,三行并列获得最高分值 ( 25 ),因此此方法将这三行包含在最终结果中。

其他资源

以下教程解释了如何在 R 中执行其他常见操作:

如何选择R中任意列中出现值的行
如何在 R 中选择特定列
如何在R中按索引选择列

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注