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

R语言dplyr中mutate_at以指定列为分子逐列计算报错

错误原因

mutate_at里用~定义匿名计算规则时,~必须放在整个计算表达式的最开头,用来告诉dplyr这是逐列执行的公式:.代表当前遍历到的列,你之前写的x3/ ~.把~放在了除法运算符后面,R无法识别为合法的函数定义,自然会报错。

正确代码

把~移到表达式最前面,将.放在分母位置即可:

library(dplyr)

# 测试数据构造
x1<-rpois(20,5)
x2<-rpois(20,5)
x3<-rpois(20,2)
df1<-data.frame(x1,x2,x3)

# 计算x3逐列除以x1到x3的结果
df1 %>% mutate_at(vars(x1:x3), list(x3_by_all = ~x3/.))

运行后会新增3列:

  • x1_x3_by_all:值为x3/x1
  • x2_x3_by_all:值为x3/x2
  • x3_x3_by_all:值为x3/x3,结果恒为1
版本适配提示

如果你使用的是1.0.0及以上版本的dplyr,官方更推荐用across()搭配mutate()替代已经进入维护状态、不再新增功能的mutate_at(),写法逻辑完全一致:

df1 %>% mutate(across(x1:x3, list(x3_by_all = ~x3/.)))

如果你的列中存在0值,建议加一层容错避免出现无意义的Inf结果:

# 分母为0时返回NA
df1 %>% mutate(across(x1:x3, list(x3_by_all = ~x3/ifelse(. == 0, NA, .))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:18:27