如何在 dplyr 中使用条件过滤器


您可以使用以下基本语法,使用 R 中dplyr包中的函数对数据框应用条件过滤器:

 library (dplyr)

#filter data frame where points is greater than some value (based on team)
df %>% 
  filter(case_when(team==' A ' ~ points > 15,
                   team==' B ' ~ points > 20,
                   TRUE ~ points > 30))

此特定示例过滤数据框中的行,其中列的值大于特定值,以团队列的值为条件

相关: dplyr 中 case_when() 的介绍

以下示例展示了如何在实践中使用此语法。

示例:如何在 dplyr 中使用条件过滤器

假设我们在 R 中有以下数据框,其中包含有关各种篮球运动员的信息:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'),
                 points=c(10, 12, 17, 18, 24, 29, 29, 34, 35))

#view data frame
df

  team points
1 to 10
2 to 12
3 to 17
4 B 18
5 B 24
6 B 29
7 C 29
8 C 34
9 C 35

现在假设我们要应用以下条件过滤器:

  • 只为A队得分大于15 的球员保留队伍。
  • 只为B队得分大于20 的球员保留队伍。
  • 只为C队得分超过30 的球员保留队伍。

我们可以使用dplyr包中的filter()case_when()函数在数据帧上应用此条件过滤器:

 library (dplyr)

#filter data frame where points is greater than some value (based on team)
df %>% 
  filter(case_when(team==' A ' ~ points > 15,
                   team==' B ' ~ points > 20,
                   TRUE ~ points > 30))

  team points
1 to 17
2 B 24
3 B 29
4 C 34
5 C 35

现在,数据框中的行将被过滤,其中列中的值大于特定值,以团队列中的值为条件

注意#1 :在case_when()函数中,我们在最后一个参数中使用TRUE来表示 team 列中不等于“A”或“B”的所有值。

注意#2 :您可以在此处找到 dplyr case_when()函数的完整文档。

其他资源

以下教程解释了如何在 dplyr 中执行其他常用功能:

如何使用 dplyr 按行号过滤
如何使用 dplyr 按多个条件进行过滤
如何在 dplyr 中使用“不包含”过滤器

添加评论

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