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

如何用dplyr将指定行列求和结果赋值给特定行并保留其余数据

使用dplyr实现指定行的求和赋值

以下是两种更简洁的dplyr实现方案,满足你的需求:

方案一:用across批量处理多列

library(dplyr)

# 初始化数据框
df <- data.frame(num1 = c('a', 'b', 'c', 'd'),
                 num2 = c(1, 2, 3, 4),
                 num3 = c(5, 6, 7, 8),
                 num4 = c('x', 'y', 'b', 'd'))

# 完成求和赋值
df <- df %>%
  mutate(
    # 对num2、num3列批量处理
    across(c(num2, num3), 
           ~if_else(num1 == 'a', 
                    # 计算num1为a/b/c的当前列总和
                    sum(.x[num1 %in% c('a', 'b', 'c')]), 
                    # 其他行保留原值
                    .x))
  )

执行后得到的结果:

print(df)
#   num1 num2 num3 num4
# 1    a   10   26    x
# 2    b    2    6    y
# 3    c    3    7    b
# 4    d    4    8    d

这个方案通过across一次性处理目标列,避免了重复编写mutate语句,逻辑更紧凑。

方案二:用rows_update直接匹配更新

library(dplyr)

df <- data.frame(num1 = c('a', 'b', 'c', 'd'),
                 num2 = c(1, 2, 3, 4),
                 num3 = c(5, 6, 7, 8),
                 num4 = c('x', 'y', 'b', 'd'))

# 先计算a/b/c行的num2、num3总和,生成仅包含a行的更新数据集
sum_vals <- df %>%
  filter(num1 %in% c('a', 'b', 'c')) %>%
  summarise(num1 = 'a', across(c(num2, num3), sum))

# 将sum_vals的值更新到原数据框的对应行
df <- df %>%
  rows_update(sum_vals, by = "num1", unmatched = "ignore")

这个方案先单独计算需要更新的值,再通过rows_update精准匹配num1='a'的行进行替换,逻辑更直观,适合需要复用汇总值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:22