首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一列中的条件筛选非NA值,保留所有其他记录。

根据另一列中的条件筛选非NA值,保留所有其他记录。
EN

Stack Overflow用户
提问于 2019-10-10 19:53:15
回答 2查看 52关注 0票数 1

当年份为1989年时,我试图在SRA列中筛选出NA值。换句话说,我想保留所有的价值,但NA在SRA,当年份是1989年。这包括保留在年份和SRA列中都具有NA值的记录。

代码语言:javascript
复制
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)

我尝试了以下方法,但是它过滤掉了年份和SRA具有安娜值的记录

代码语言:javascript
复制
library(dplyr)
ALLPOP4 <- ALLPOP3 %>% 
  filter(YEAR != 1989 | !is.na(SRA))

有没有办法调整代码以保存年份和SRA有安娜值的记录?谢谢

期望产出:

代码语言:javascript
复制
 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-10 19:54:38

我们可以使用&和negate (!)

代码语言:javascript
复制
library(dplyr)
ALLPOP3 %>% 
  filter(!(YEAR == 1989 & is.na(SRA))|(is.na(YEAR) & is.na(SRA)))
#   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

或者以更紧凑的方式

代码语言:javascript
复制
ALLPOP3 %>%
    filter(!(YEAR == 1989 & !is.na(YEAR) & is.na(SRA)))
票数 1
EN

Stack Overflow用户

发布于 2019-10-10 20:02:49

我们可以用stats::complete.cases来做

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58330216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档