如何在R中按列名前缀批量计算行和并自动命名新列
问题描述
需要对数据框中列名前缀相同的列计算行和,新列名直接使用对应的前缀,且无需手动命名新列(后续可能新增其他前缀的列)。
输入数据框示例:
# m_16 w_16 w_17 m_17 w_18 m_18 #values1 3 4 8 1 12 4 #values2 8 0 12 1 3 2
期望输出:
# m_16 w_16 w_17 m_17 w_18 m_18 m w #values1 3 4 8 1 12 4 8 24 #values2 8 0 12 1 3 2 11 15
解决方案
可以通过以下步骤实现自动按前缀计算行和并命名新列:
- 提取所有唯一前缀:从列名中拆分出下划线前的部分,去重得到所有需要计算的前缀
- 用
lapply批量计算行和:遍历每个前缀,筛选对应列并计算行和 - 合并结果到原数据框:将计算得到的行和数据框与原数据框合并
完整代码如下:
# 构造示例数据框 df <- data.frame( m_16 = c(3, 8), w_16 = c(4, 0), w_17 = c(8, 12), m_17 = c(1, 1), w_18 = c(12, 3), m_18 = c(4, 2), row.names = c("values1", "values2") ) # 提取唯一前缀 prefixes <- unique(sub("_.*", "", colnames(df))) # 批量计算行和 sum_cols <- lapply(prefixes, function(p) { rowSums(df[, grepl(paste0("^", p), colnames(df))]) }) # 给结果命名前缀 names(sum_cols) <- prefixes # 转换为数据框 sum_df <- as.data.frame(sum_cols) # 合并原数据框和结果 result_df <- cbind(df, sum_df) # 查看结果 result_df
运行后会自动生成对应前缀的行和列,后续新增其他前缀(如z_xx)的列时,代码无需修改即可自动识别并计算。
内容的提问来源于stack exchange,提问作者aerospace
相关产品推荐
相关产品推荐

