R语言DataFrame:如何对指定列行求和并排除特定列?
问题修正方案
原代码的错误点
- 数据框名称不匹配:你定义的数据框是
data,但后续代码用了df,会触发对象不存在的错误。 - 前缀匹配错误:
starts_with("col_")中的下划线多余,实际列名是col1、col2这类不带下划线的,应该改为starts_with("col")。 - 列筛选逻辑错误:不能用
names(df) != ends_with("_max")这种写法,正确的否定后缀匹配应该用!ends_with("_max")。 - 操作逻辑偏差:
summarise(across(...))是对每列计算总和(列维度聚合),而你需要的是行求和(每行内符合条件的列相加),应该用mutate来生成新列。
修正后的代码
方法1:使用rowSums(简洁高效)
# 统一数据框名称 df <- data.frame(newid= c(212,132,354,222,263,235,233,263,106,135,144), col1= c(1,2,2,1,4,3,2,4,0,5,0), col2= c(1,1,0,3,2,4,1,0,1,3,5), col3= c(1,1,0,3,2,4,1,0,1,3,5), col4= c(1,1,0,3,2,4,1,0,1,3,5), col_max= c("NM","mn","PA","OH","KL","AB","OT","HA","AM","LA","GA")) # 生成行求和列 df <- df %>% mutate(row_total = rowSums(across(starts_with("col") & !ends_with("_max")), na.rm = TRUE))
方法2:使用rowwise+sum(适配复杂行内计算)
df <- df %>% rowwise() %>% mutate(row_total = sum(c_across(starts_with("col") & !ends_with("_max")), na.rm = TRUE)) %>% ungroup()
结果说明
修正后的代码会在原数据框中新增一列row_total,每一行的值对应该行内所有以col开头且不以_max结尾的列的求和结果。
内容的提问来源于stack exchange,提问作者str_rst
相关产品推荐
相关产品推荐

