如何使用 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 过滤包含特定字符串的行

添加评论

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