Фильтр для значения не-NA на основе условия в другом столбце, сохраняя все остальные записи - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь отфильтровать значения NA в столбце SRA, когда ГОД - 1989. Другими словами, я хотел бы сохранить все значения, кроме NA в SRA, когда ГОД - 1989. Это включает в себя сохранение записи, которая имеет значения 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

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Мы можем сделать это, используя 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
1 голос
/ 10 октября 2019

Мы можем использовать & и отрицать (!)

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

Или более компактным способом

ALLPOP3 %>%
    filter(!(YEAR == 1989 & !is.na(YEAR) & is.na(SRA)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...