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

如何用tidyverse的mutate结合外部向量按DataFrame列值求和?

问题解决:根据数据框列值提取外部向量元素并求和

数据准备

我们有以下外部向量和数据框:

prices <- c(10, 15, 20, 30)
df <- data.frame(count = c(1, 3, 2, 4))

需求

需要根据df中count列的取值,提取prices向量的前count个元素并求和,将结果作为新列添加到df中,预期输出为:

count sum
1     1  10
2     3  45
3     2  25
4     4  75

错误尝试及问题原因

尝试用以下tidyverse代码实现时出现错误:

library(tidyverse)
df |>
  mutate(sum = sum(!!prices[1:count]))

报错信息:

Error in quos(..., .ignore_empty = "all") : 
  object 'count' not found

问题原因:count是df内部的列变量,直接在prices[1:count]中引用时,R会在全局环境中查找count而非df的列环境,导致找不到对象的错误;同时!!的用法在此场景下不适用,无法正确关联数据框内的列。

正确实现方法

方法一:使用rowwise()逐行处理

通过rowwise()让mutate逐行计算,确保每一行的count值被正确引用:

library(tidyverse)

prices <- c(10, 15, 20, 30)
df <- data.frame(count = c(1, 3, 2, 4))

df |>
  rowwise() |>
  mutate(sum = sum(prices[1:count])) |>
  ungroup()

ungroup()用于取消逐行分组状态,避免后续操作受影响。

方法二:使用map_dbl()遍历计算

利用purrr包的map_dbl()函数遍历count列的每个值,执行求和操作:

df |>
  mutate(sum = map_dbl(count, ~sum(prices[1:.x])))

map_dbl()会对count的每个元素应用匿名函数~sum(prices[1:.x]),返回数值型结果作为新列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:12