如何使用 dplyr 对数据进行分组和过滤
您可以使用 R 中的 dplyr 包使用以下基本语法对数据进行分组和过滤:
df %>% group_by(team) %>% filter(any(points = = 10 ))
这种特殊的语法将数据框的每列分组,称为团队,并且仅过滤点列中至少有一个值等于 10 的组。
以下示例展示了如何在实践中使用此语法。
示例:使用 dplyr 对数据进行分组和过滤
假设我们在 R 中有以下数据框,其中包含有关各种篮球运动员的信息:
#create data frame
df <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'),
points=c(10, 15, 8, 4, 10, 10, 12, 12, 7))
#view data frame
df
team points
1 to 10
2 to 15
3 to 8
4 B 4
5 B 10
6 B 10
7 C 12
8 C 12
9 C 7
我们可以使用以下代码根据Team列中的值对数据框进行分组,然后过滤掉Points列中至少有一个值不等于 10 的所有组:
library (dplyr)
#group by team and filter out teams where no points value is equal to 10
df %>%
group_by(team) %>%
filter(any(points == 10 ))
# A tibble: 6 x 2
# Groups: team [2]
team points
1 to 10
2 to 15
3 to 8
4 B 4
5 B 10
6 B 10
请注意,团队等于“C”的所有行都会被过滤,因为团队“C”的分数列中没有等于 10 的值。
请注意,这只是我们可以应用的过滤器的一个示例。
例如,我们可以应用另一个过滤器,在该过滤器中过滤得分列中至少有一个值大于 13 的球队:
library (dplyr)
#group by team and filter out teams where no points value is greater than 13
df %>%
group_by(team) %>%
filter(any(points > 13 ))
# A tibble: 3 x 2
# Groups: team [1]
team points
1 to 10
2 to 15
3 to 8
请注意,仅保留球队等于“A”的行,因为它是唯一一支至少有一个分值大于 13 的球队。
注意:您可以在 dplyr中找到过滤器函数的完整文档。
其他资源
以下教程解释了如何在 dplyr 中执行其他常见操作:
如何使用 dplyr 按组选择第一行
如何使用 dplyr 按多个条件进行过滤
如何使用 dplyr 过滤包含特定字符串的行