如何使用tidyverse筛选R语言数据框中仅含0值的行
tidyverse实现方案
你可以使用dplyr(tidyverse核心包之一)的filter()搭配if_all()函数完成筛选,代码如下:
# 加载dplyr,也可以直接加载整个tidyverse:library(tidyverse) library(dplyr) # 筛选逻辑:除ID外的所有列值均为0 df %>% filter(if_all(.cols = -ID, .fns = ~ .x == 0))
代码逻辑说明
if_all()是dplyr 1.0.0版本后推出的跨列条件判断函数,第一个参数指定要判断的列范围,这里-ID代表排除ID列的其余所有列- 第二个参数指定判断条件,
~ .x == 0是匿名函数的简写,代表每一列的每个值都要等于0 - 只有整行所有被选中的列都满足条件时,
filter()才会保留该行,输出结果和你给出的预期完全一致。
低版本dplyr兼容方案
如果你使用的dplyr版本低于1.0.0不支持if_all(),可以用rowSums()实现相同逻辑:
df %>% filter(rowSums(select(., -ID) != 0) == 0)
该逻辑的原理是:先统计每行除ID列外不等于0的数值个数,仅保留个数为0(即全为0)的行。
内容的提问来源于stack exchange,提问作者Anh
相关产品推荐
相关产品推荐

