如何使用 dplyr 过滤数据帧而不丢失 na 行
您可以使用以下基本语法来过滤数据框,而不会丢失包含 NA 值的行,使用 R 中dplyr和Tidyr包中的函数:
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 中使用“不包含”过滤器