如何简洁地按条件删除多变量数据框中的指定行?
问题描述
假设有如下数据框(实际包含数百个变量):
df = data.frame ( x = c(1,2,3,4,5), y = c(1,2,3,4,5))
需要删除任意变量中包含1或5的行。已知逐个变量判断的写法:
df[!(df$x==1|df$x==5|df$y==1|df$y==5),]
但需要能批量处理数百个变量的简便方法。
解决方案
方法一:Base R 批量处理
用apply逐行校验,保留所有元素都不在{1,5}中的行:
df[apply(df, 1, function(row) !any(row %in% c(1,5))), ]
apply(df, 1, ...):对数据框的每一行执行后续逻辑row %in% c(1,5):检查该行每个元素是否是1或5!any(...):取反后,只有当该行没有任何一个元素是1或5时才保留
方法二:tidyverse 语法实现
如果常用dplyr,用filter+if_all更简洁直观:
library(dplyr) df %>% filter(if_all(everything(), ~ !(.x %in% c(1,5))))
everything():选中数据框内所有变量if_all(...):要求所有变量都满足后续条件~ !(.x %in% c(1,5)):每个变量的元素都不能是1或5
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

