首页 > 解决方案 > 根据另一列中的条件过滤非 NA 值,保留所有其他记录

问题描述

当 YEAR 为 1989 时,我试图过滤掉 SRA 列中的 NA 值。换句话说,当 YEAR 为 1989 时,我想在 SRA 中保留除 NA 之外的所有值。这包括保留在 Year 和SRA 柱

SRA <- c(NA, NA, NA, NA, NA, 5, 6, NA, NA, NA, 7, 10, NA, NA, 7, NA)
YEAR <- c(1989, 1989, 1989, 1989, 1989, 1989, 1989, 1990, 1990, 1990, 1990, 1990, 1991, 1991, NA, NA)
ALLPOP3 <- data.frame(YEAR, SRA)

我尝试了以下方法,但它过滤掉了 YEAR 和 SRA 具有 NA 值的记录

library(dplyr)
ALLPOP4 <- ALLPOP3 %>% 
  filter(YEAR != 1989 | !is.na(SRA))

有没有办法可以调整代码以保留 YEAR 和 SRA 具有 NA 值的记录?谢谢

期望的输出:

 YEAR SRA
1  1989   5
2  1989   6
3  1990  NA
4  1990  NA
5  1990  NA
6  1990   7
7  1990  10
8  1991  NA
9  1991  NA
10   NA   7
11   NA  NA

标签: r

解决方案


我们可以使用stats::complete.cases

ALLPOP3[!complete.cases(ALLPOP3[,c("YEAR","SRA")]), ]

#    YEAR SRA
# 1  1989  NA
# 2  1989  NA
# 3  1989  NA
# 4  1989  NA
# 5  1989  NA
# 8  1990  NA
# 9  1990  NA
# 10 1990  NA
# 13 1991  NA
# 14 1991  NA
# 15   NA   7
# 16   NA  NA

推荐阅读