如何按 dplyr 中除一列之外的所有列进行分组
您可以使用 R 中的dplyr包,使用以下基本语法对数据框中除一列之外的所有列进行分组:
df %>%
group_by(across(c( - this_column)))
此特定示例按除名为this_column的列之外的所有列对数据框进行分组。
请注意,公式中的负号 ( – ) 告诉 dplyr 在group_by()函数中排除该特定列。
以下示例展示了如何在实践中使用此语法。
示例:按 dplyr 中除一列之外的所有列进行分组
假设我们在 R 中有以下数据框,其中包含有关各种篮球运动员的信息:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), dots=c(99, 104, 119, 113)) #view data frame df team position starter points 1 AGY 99 2 AGY 104 3 AFY 119 4 AFN 113 5 BGY 99 6 BGN 104 7 BFN 119 8 BFN 113
现在假设我们想要找到点列中的最大值,该列在数据框中的所有其他列中分组。
我们可以使用以下语法来做到这一点:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c( - points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
从结果我们可以看出:
- 队伍值为 A、位置值为 G、起始值为 Y 的所有玩家的最大分值为104 。
- 所有队伍值为 A、位置值为 F、起始值为 Y 的玩家的最大分值是119 。
- 所有球队值为 A、位置值为 F、起始值为 N 的球员的最大分值是113 。
等等。
请注意,如果我们在group_by()函数中输入除点之外的所有列名称,也可以获得相同的结果:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
这对应于前面示例的结果。
但是,请注意,在group_by()函数中排除点列比键入所有其他列的名称要容易得多。
其他资源
以下教程解释了如何使用 dplyr 执行其他常见任务: