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

如何删除data frame中两行值均为非零的对应列

实现方案

你要的规则本质是仅删除所有值都不为0的列,保留存在至少1个0的列,可以用基础R或者dplyr快速实现,不需要写复杂的if else判断:

第一步:构造示例测试数据

df <- data.frame(
  Dogs = c(1, 2),
  Cats = c(0, 1),
  Snakes = c(1, 0),
  Elephants = c(3, 2)
)

方法1:基础R实现

直接通过列求和逻辑筛选符合要求的列即可:

# colSums(df == 0) 统计每列中0的个数,大于0说明存在至少1个0,保留该列
result <- df[, colSums(df == 0) > 0]

方法2:dplyr实现

用select()搭配where()列选择器即可实现列级别的条件筛选:

library(dplyr)

result <- df %>%
  # any(.x == 0) 判断当前列是否存在至少1个0,是则保留
  select(where(~ any(.x == 0)))

输出结果验证

两种方法得到的结果完全符合你的要求:

print(result)
#   Cats Snakes
# 1    0      1
# 2    1      0

补充说明

如果你的数据中存在NA值,只需要在判断逻辑中加na.rm = TRUE参数避免判断异常,例如dplyr写法调整为:

result <- df %>%
  select(where(~ any(.x == 0, na.rm = TRUE)))

该逻辑同样适用于超过2行的dataframe,规则通用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:07