стирать строки, когда переменная равна 0, но не когда она равна NA, или когда два столбца равны NA в R - PullRequest
0 голосов
/ 31 марта 2020

У меня есть набор данных df, который выглядит следующим образом

rel freq key
1.1 1.1 a       
1   1   b       
1   NA  c       
NA  NA  d       
NA  0   e       
NA  1   f

Я хочу получить это:

rel freq key
1.1 1.1 a       
1   1   b       
1   NA  c               
NA  1   f

В основном я хочу избавиться от строк, где freq = 0 или строки, в которых значения rel и freq равны NA.

Я пытался

df <- df[df$freq!=0,] 

отфильтровать freq = 0, но это вызывает некоторые проблемы

аналогично

library(dplyr)
df <- filter(df, freq != 0)

удаляет все строки с помощью freq = NA

Любое предложение о том, как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Попробуйте:

subset(df, !(freq == 0 & !is.na(freq) | (is.na(freq) & is.na(rel))))

Вывод:

  rel freq key
1 1.1  1.1   a
2 1.0  1.0   b
3 1.0   NA   c
6  NA  1.0   f

Или в dplyr:

dplyr::filter(df, !(freq == 0 & !is.na(freq) | (is.na(freq) & is.na(rel))))
1 голос
/ 31 марта 2020
df[!(!is.na(df$freq) & df$freq == 0 | (is.na(df$freq) & is.na(df$rel))),]

#   rel freq key
# 1 1.1  1.1   a
# 2 1.0  1.0   b
# 3 1.0   NA   c
# 6  NA  1.0   f

Данные

df <- data.frame(rel = c(1.1, 1, 1, NA, NA, NA),
                 freq = c(1.1, 1, NA, NA, 0, 1),
                 key = letters[1:6])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...