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

如何用Base R合并R表格中列名≥20的列并求和?

用Base R合并表格中列名≥20的列

原始表格:

0    10    20    31    32    33
  0  20267   193    22   140   124   110
  18     5     0     0     0     0     0

需求:将列名大于等于20的列合并为一列(命名为20+),值为对应行的求和结果,最终得到目标表格:

0    10   20+
  0  20267   193   396
  18     5     0     0

已知vcdExtra::collapse.table可实现该功能,但希望用Base R完成,表格的dput()输出如下:

structure(c(20267L, 5L, 193L, 0L, 22L, 0L, 140L, 0L, 124L, 0L, 
110L, 0L), dim = c(2L, 6L), dimnames = structure(list(c("0", 
"18"), c("0", "10", "20", "31", "32", "33")), names = c("", "")), class = "table")

Base R实现方法

通过筛选列、行求和、合并结果三步即可完成,逻辑清晰且无需额外包:

分步实现代码

# 加载原始表格
tab <- structure(c(20267L, 5L, 193L, 0L, 22L, 0L, 140L, 0L, 124L, 0L, 
110L, 0L), dim = c(2L, 6L), dimnames = structure(list(c("0", 
"18"), c("0", "10", "20", "31", "32", "33")), names = c("", "")), class = "table")

# 筛选出列名<20的列,保留原结构
tab_keep <- tab[, as.numeric(colnames(tab)) < 20, drop = FALSE]

# 计算列名≥20的列的行求和
tab_20plus <- rowSums(tab[, as.numeric(colnames(tab)) >= 20, drop = FALSE])

# 合并两部分并设置新列名
result <- cbind(tab_keep, `20+` = tab_20plus)

# 若需要保持原table类型,执行此步
result <- as.table(result)

简化版代码

如果不需要分步解释,可直接用一行核心代码完成:

result <- cbind(tab[, as.numeric(colnames(tab)) < 20], `20+` = rowSums(tab[, as.numeric(colnames(tab)) >= 20]))
result <- as.table(result)

运行后得到的result即为目标表格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 23:54:50