如何用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
相关产品推荐
相关产品推荐

