在R语言中筛选仅含F或NA的多列数据框行
解决方案:筛选仅含F或NA的行
示例数据构造
先还原测试数据,方便验证:
selected_df <- data.frame( col1 = c("A", "F", "F", "F", "A", "F"), col2 = c("B", "D", "F", NA, "D", "F"), col3 = c("F", "E", NA, NA, "C", "F"), col4 = c("C", "A", NA, NA, "A", "F"), length = c(15, 12, 3, 8, 11, 10), stringsAsFactors = FALSE )
Base R 实现
你的原代码要求col1-col4全为F,因此漏掉了含NA的行。正确逻辑是检查每一行的col1-col4元素仅为F或NA,可以用apply逐行验证:
selected_new <- selected_df[ apply(selected_df[, c("col1", "col2", "col3", "col4")], 1, function(x) all(x %in% c("F", NA))), ]
dplyr 实现(tidyverse 风格)
如果习惯用tidyverse工具,用rowwise()结合c_across()更直观:
library(dplyr) selected_new <- selected_df %>% rowwise() %>% filter(all(c_across(col1:col4) %in% c("F", NA))) %>% ungroup()
结果说明
两种方法都会得到你需要的第3、4、6行:
col1 col2 col3 col4 length 3 F F <NA> <NA> 3 4 F <NA> <NA> <NA> 8 6 F F F F 10
内容的提问来源于stack exchange,提问作者Melanie A Kool
相关产品推荐
相关产品推荐

