如何使用 dplyr 过滤数据帧而不丢失 na 行


您可以使用以下基本语法来过滤数据框,而不会丢失包含 NA 值的行,使用 R 中dplyrTidyr包中的函数:

 library (dplyr)
library (tidyr)

#filter for rows where team is not equal to 'A' (and keep rows with NA)
df <- df %>% filter((team != ' A ') %>% replace_na( TRUE ))

请注意,此公式使用Tidyr包中的Replace_na()函数将 NA 值转换为 TRUE,以便在过滤期间它们不会从数据帧中删除。

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

示例:使用 dplyr 过滤数据帧而不丢失 NA 行

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

 #create data frame
df <- data. frame (team=c('A', NA, 'A', 'B', NA, 'C', 'C', 'C'),
                 points=c(18, 13, 19, 14, 24, 21, 20, 28),
                 assists=c(5, 7, 17, 9, 12, 9, 5, 12))

#view data frame
df

  team points assists
1 to 18 5
2 <NA> 13 7
3 A 19 17
4 B 14 9
5 <NA> 24 12
6 C 21 9
7 C 20 5
8 C 28 12

现在假设我们使用dplyr包中的filter()函数来过滤数据框,以仅包含team列中的值不等于 A 的行:

 library (dplyr)

#filter for rows where team is not equal to 'A'
df <- df %>% filter(team != ' A ')

#view updated data frame
df

  team points assists
1 B 14 9
2 C 21 9
3 C 20 5
4 C 28 12

请注意,团队列中的值等于 A 的每一行都已被过滤,包括团队列中的值等于 NA 的行。

如果我们想要过滤team等于 A 的行并保留具有 NA 值的行,我们可以使用以下语法:

 library (dplyr)
library (tidyr)

#filter for rows where team is not equal to 'A' (and keep rows with NA)
df <- df %>% filter((team != ' A ') %>% replace_na( TRUE ))

#view updated data frame
df

  team points assists
1 <NA> 13 7
2 B 14 9
3 <NA> 24 12
4 C 21 9
5 C 20 5
6 C 28 12

请注意,团队列中的值等于 A 的每一行都被过滤,但我们保留了团队列中的值等于 NA 的行。

注意:您可以在此处找到 Tidyr Replace_na()函数的完整文档。

其他资源

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

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

添加评论

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