我有一个由参与者组成的数据框'广泛分数,每列代表一个问卷项目,每行代表一个参与者的回答。
我的数据如下所示:
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保留在数据框中。
如果可能的话,有人可以给我一个可以在dplyr管道中使用的答案吗?谢谢,非常感谢!
答案 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.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