Сохранить строки с пустыми значениями в одном конкретном столбце и удалить строки с пустыми значениями во всех других столбцах - PullRequest
0 голосов
/ 23 мая 2018

У меня есть фрейм данных, состоящий из оценок участников в широком формате, где каждый столбец представляет один элемент анкеты, а каждая строка представляет ответы одного участника.

Мои данные будут выглядеть примерно так:

id <- c("001", "002", "003", "004", "005")
q1 <- c(1, 2, "", 3, 5)
q2 <- c("", 2, 3, 1, "")
q3 <- c(1, 3, 2, 5, 2)
q4 <- c(1, 2, 3, "", 4)
q5 <- c(1, 2, 3, 4, 3)
df <- data.frame(id, q1, q2, q3, q4, q5)
df[, 2:6] <- apply(df[, 2:6], 2, as.numeric)

Я хотел бы сохранить строки данных участников, когда они оставляют определенный столбец, скажем, q4, пустым.Одновременно я хотел бы исключить строку, если любой элемент, кроме q4, оставлен пустым.

Конечный результат, который я имею в виду, похож на скриншот ниже.Участник 001 и 005 удаляется, потому что у него отсутствуют оценки q2.Участник 003 удален из-за отсутствия баллов за q1.Даже если у участника 004 отсутствует оценка q4, я все еще хочу сохранить участника 004 во фрейме данных.

End Result

Если возможно, кто-нибудь может предоставить мнес ответом, который может быть использован в трубе dplyr?Спасибо и высоко ценится!

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

основание r с использованием complete.cases и which

df[complete.cases(df[,-which(names(df) %in% "q4")]),]
#   id q1 q2 q3 q4 q5
#2 002  2  2  3  2  2
#4 004  3  1  5 NA  4

или по положению столбца

df[complete.cases(df[,-5]),]
#   id q1 q2 q3 q4 q5
#2 002  2  2  3  2  2
#4 004  3  1  5 NA  4
0 голосов
/ 23 мая 2018

Попробуйте drop_na() из tidyr

library(tidyr)
df %>% drop_na(-q4)

# output
   id q1 q2 q3 q4 q5
#2 002  2  2  3  2  2
#4 004  3  1  5 NA  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...