R语言:移除指定列全为0的数据框行(适配动态列名)
R语言筛选非全0的S列行解决方案
核心思路:保留至少有一个以S开头的列不为0的行,避免因正负抵消导致的误删。
方法一:Base R 实现
# 定位所有以S开头的列 s_columns <- grep("^S", colnames(df)) # 筛选出非全0的行 df_result <- df[rowSums(df[, s_columns] != 0) > 0, ]
说明:df[, s_columns] != 0生成逻辑矩阵标记非0位置,rowSums统计每行非0元素数量,数量>0即表示该行S列不全为0,予以保留。
方法二:dplyr(tidyverse)实现
library(dplyr) df_result <- df %>% filter(if_any(starts_with("S"), ~ .x != 0))
说明:starts_with("S")精准匹配所有S开头的列,if_any检查每行是否存在至少一个非0值,满足条件的行被保留。
两种方法最终都会得到保留Cat为A、B、C、F的结果,D、E行因S列全0被移除。
内容的提问来源于stack exchange,提问作者ThingyBlahBlah3
相关产品推荐
相关产品推荐

