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

在tidyverse中如何将字符向量变量转为符号并计算随机列之和?

用tidyverse计算数据框随机两列的行和

问题根源

你代码里的vars是字符向量,{{vars}}只是把这个字符向量展开,sum()会尝试对字符值求和,自然抛出类型错误。下面是几种tidyverse的解决思路:


方法1:用pick() + rowSums()(推荐,更高效)

不需要用rowwise(),rowSums直接按行计算选中列的和,性能更好:

df <- data.frame(a=seq(1,3),b=seq(4,6),c=seq(7,9))
vars <- sample(letters[1:3],2)
df %>% mutate(s = rowSums(pick(all_of(vars))))

pick(all_of(vars))会根据字符向量vars匹配并选中对应的列,rowSums直接计算每行的累加和。


方法2:rowwise()配合符号求值

如果一定要用rowwise(),需要把字符向量转换成列名符号再展开:

df %>% rowwise() %>% mutate(s = sum(!!!syms(vars))) %>% ungroup()
  • syms(vars)把字符向量转成代表列名的符号列表
  • !!!将符号列表展开成独立的列引用,让sum()能正确读取每行的列值
  • 最后记得用ungroup()取消行分组,避免后续操作受影响

方法3:across() + rowSums()

和方法1逻辑类似,用across()选中目标列后计算行和:

df %>% mutate(s = rowSums(across(all_of(vars))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:10:59