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

如何在R语言中筛选总和大于0的数值型列名?

在R语言中筛选数值型且列总和大于0的列名

问题背景

现有如下数据表格:

NameGradeTest1Test2Test3
TimA0.70.00.8
AmyB0.80.00.5
JohnB0.60.00.6

需要获取所有数值型且列总和大于0的列名,预期输出如下:

Test1 # 总和为2.1
Test3 # 总和为1.9

# Name和Grade因非数值型被忽略
# Test2因总和为0被忽略

实现方法

步骤1:构造数据框

先将示例数据转换为R可处理的数据框:

df <- data.frame(
  Name = c("Tim", "Amy", "John"),
  Grade = c("A", "B", "B"),
  Test1 = c(0.7, 0.8, 0.6),
  Test2 = rep(0.0, 3),
  Test3 = c(0.8, 0.5, 0.6)
)

步骤2:筛选并输出目标列

通过以下代码完成筛选逻辑,并输出符合要求的结果及忽略说明:

# 提取所有数值型列
numeric_cols <- sapply(df, is.numeric)
# 计算数值型列的总和
col_sums <- colSums(df[, numeric_cols])
# 筛选总和大于0的列
valid_cols <- names(col_sums[col_sums > 0])

# 输出有效列及其总和
for(col in valid_cols) {
  cat(sprintf("%s # 总和为%.1f\n", col, col_sums[col]))
}
cat("\n")

# 输出被忽略的列说明
non_numeric_cols <- names(df)[!numeric_cols]
cat(sprintf("# %s因非数值型被忽略\n", paste(non_numeric_cols, collapse = "和")))
zero_sum_cols <- names(col_sums[col_sums == 0])
cat(sprintf("# %s因总和为0被忽略\n", paste(zero_sum_cols, collapse = "和")))

运行代码后即可得到与预期一致的输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:38:19