保留一个特定列中包含空值的行,并删除所有其他列中包含空值的行

时间:2018-05-23 08:58:52

标签: r dplyr

我有一个由参与者组成的数据框'广泛分数,每列代表一个问卷项目,每行代表一个参与者的回答。

我的数据如下所示:

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)

我想保留一排参与者&#39;当数据离开特定列时,让我们说q4,空白。同时,只要q4以外的任何项目都留空,我想排除一行。

我想到的最终结果就像下面的截图。参与者001和005被删除,因为他们缺少q2分数。由于缺少q1分数,参与者003被删除。即使参与者004缺少q4分数,我仍然希望将参与者004保留在数据框中。

End Result

如果可能的话,有人可以给我一个可以在dplyr管道中使用的答案吗?谢谢,非常感谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用complete.caseswhich

进行基础搜索
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