如何筛选数据框中不含0或17的行并生成新数据框
解决方法
给定的原始数据框定义如下:
df <- structure(list(id = c(1, 2, 3), date1 = c(13, 9, 0), date2 = c(17L, 13L, 17L)), row.names = c(NA, -3L), class = "data.frame")
我们需要筛选出排除id列后,行内存在0或17以外数值的行,以下是两种可行的实现方式:
方式一:Base R原生代码
# 提取需要检查的列(去掉id列) target_cols <- df[, !names(df) %in% "id"] # 逐行判断:是否有值不在{0,17}这个集合里 should_keep <- apply(target_cols, 1, function(r) any(!r %in% c(0, 17))) # 筛选符合条件的行 new_df <- df[should_keep, ]
运行后new_df就是预期的结果:
id date1 date2 1 1 13 17 2 2 9 13
方式二:tidyverse(dplyr)语法
如果平时用tidyverse工具链,代码会更简洁直观:
library(dplyr) new_df <- df %>% filter(if_all(-id, ~ .x %in% c(0, 17)) == FALSE)
或者用逐行判断的写法:
new_df <- df %>% rowwise() %>% filter(any(c_across(-id) != 0 & c_across(-id) != 17)) %>% ungroup()
内容的提问来源于stack exchange,提问作者Erik Brole
相关产品推荐
相关产品推荐

