You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中删除空列或求和为0的列

解决大CSV文件中删除求和为0的列的问题

针对你的需求,结合你使用的dplyr/tidyverse和vroom,可以通过以下两种可靠方法删除求和为0的列,同时保留样本名称列(...1):

方法一:使用dplyr::select() + where()

直接筛选出数值列中求和不为0的列,同时保留第一列样本名:

library(tidyverse)
library(vroom)

# 读取数据(如果还未读取)
df <- vroom("你的文件路径.csv")

# 清理数据:保留样本列,删除求和为0的数值列
df_cleaned <- df %>%
  select(...1, where(~ is.numeric(.x) && sum(.x) != 0))

方法二:先筛选列名再选取

先单独处理数值列的求和筛选,再合并样本列:

# 提取数值列中求和不为0的列名
valid_numeric_cols <- df %>%
  select(-...1) %>%  # 排除样本名字符列
  colSums() %>%
  keep(. != 0) %>%  # 保留求和不为0的列
  names()

# 组合样本列和有效数值列
df_cleaned <- df %>%
  select(...1, all_of(valid_numeric_cols))

对你之前遇到问题的解释

  1. 改编行处理代码报错:行处理的keep参数是针对行索引设计的,列筛选需要用select()而非行操作函数,两者逻辑完全不同。
  2. which函数选中所有列:你大概率没排除字符型的...1列,colSums()对字符列会返回NA,而NA != 0会被判定为TRUE,导致所有列被误选。必须先排除非数值列再计算列求和。
  3. janitor::remove_empty无效:这个函数是删除全为NA或空值的列,不是求和为0的列,完全不适用你的场景。
  4. Excel宏崩溃:10000+列的大文件远超Excel的内存处理上限,用R处理这类大文件更合适。
  5. Stack代码过度删减:大概率是代码默认筛选了求和大于某个阈值(而非不等于0),或者没排除样本列导致正常列被误删。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:23:14