保留特定列(q4)为空的行,剔除其他列含空值的行(dplyr实现)
解决方案(基于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)
接下来是完全符合需求的dplyr管道实现:
library(dplyr) filtered_df <- df %>% # 第一步:筛选出q4列存在空值(NA)的行 filter(is.na(q4)) %>% # 第二步:确保除id和q4外的所有列都没有空值 filter(across(-c(id, q4), ~ !is.na(.x)))
代码细节解释:
- 第一个
filter(is.na(q4)):先锁定所有q4为空值的行,在你的示例里这一步会先筛选出参与者004的数据。 - 第二个
filter(across(...)):用across函数遍历除id和q4之外的所有问卷题目列,逐一检查这些列是否不存在空值。只有当所有这些列都满足无空值时,才会保留该行,完美剔除那些q4为空但其他列也有空值的无效数据。
运行这段代码后,filtered_df里就只会保留你需要的参与者004的数据。
内容的提问来源于stack exchange,提问作者DTYK
相关产品推荐
相关产品推荐

