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

R语言如何删除dataframe中所有值均大于-1的列并解决报错

报错根因

你操作的original_df是data.table类型,data.table的[运算符第一个参数默认对应行筛选规则,你直接将sapply返回的长度等于列数的逻辑向量传入第一个参数,data.table会误认为你要筛选行,而你的数据只有24行,向量长度和行数不匹配,因此触发逻辑向量回收被禁用的报错。

原有逻辑问题

你的筛选需求是「列中存在至少一个小于等于-1的数值就保留」,但原有代码max(x) <= -1的逻辑是「列中所有数值都小于等于-1才保留」,和需求完全相反。同时你没有排除非数值的Cell列,直接对所有列计算可能触发类型报错。

正确实现代码

方法1:修正索引位置(兼容data.frame和data.table)

将列筛选逻辑放到[的第二个参数(列参数位置),同时调整判断逻辑:

# 第一个TRUE用来保留Cell列,对其余数值列判断是否存在<= -1的值
keep_col <- c(TRUE, sapply(original_df[, -1], function(x) any(x <= -1)))
desired_df <- original_df[, keep_col, with = FALSE]

方法2:data.table原生写法

# .SDcols传入判断函数,自动保留符合要求的列,is.character(x)用来保留Cell列
desired_df <- original_df[, .SD, .SDcols = function(x) is.character(x) || any(x <= -1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:48:01