Выбор строк с различными условиями rowSums - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь выбрать создание нового df 'Z' из df, в котором для столбцов 9, 10,11,1,2,4,5 меньше 3 NA, а для столбцов 3,6 7,8,12,13,14 точно 7 NA. Я использую этот код

Z <- df[c(rowSums(is.na(df[, c(9:11,1,2,4,5)]) < 3)) & (rowSums(is.na(df[, c(6:8,12:14,3)]) == 7)),]

Однако в качестве вывода я получаю пустой df только с 14 именами столбцов. Что я делаю не так?

1 Ответ

0 голосов
/ 28 апреля 2020

У вас просто были некоторые скобки в неправильном месте

df[rowSums(is.na(df[, c(9:11,1,2,4,5)])) < 3 & rowSums(is.na(df[, c(6:8,12:14,3)])) == 7,]

Чтобы помочь вам сделать код более понятным для себя при отладке, попробуйте распространяться по строкам с отступами или между кодами - вот что я написал

df[
  rowSums( is.na( df[, c(9:11, 1, 2, 4, 5)] ) ) <  3 & 
  rowSums( is.na( df[,    c(6:8, 12:14, 3)] ) ) == 7, ]

По сравнению с вашим, интервал помогает показать ошибку (ы)

df[
  c(
     rowSums( is.na( df[, c(9:11, 1, 2, 4, 5)] ) <  3 ) ) & 
    (rowSums( is.na( df[,    c(6:8, 12:14, 3)] ) == 7 ) ), ]

Проверено с использованием

df <- data.frame(NA,2,NA,4,5,NA,NA,NA,9,10,11,NA,NA,NA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...