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

R语言报错Error in mutate_impl:仅定义于全数值变量数据框求助

解决mutate_impl报错:Evaluation error: only defined on a data frame with all numeric variables

咱们来拆解下你遇到的报错根源:

  1. 你在gather操作后,原来的ExposedDays和AboveMaxDays列已经被转换成了Variable(存列名)和Value(存对应数值)这两列,此时再在mutate里调用sum(ExposedDays),R根本找不到这个列,自然会出问题。
  2. 你的数据框里还包含PatGroup、Ageband这类非数值列,直接对整个数据框的列执行sum,R会因为遇到非数值类型而报错。

根据你的需求,我给你两种修正方案:

方案1:计算全局总和(整个数据集的总暴露天数等)

先在原始数据上算出总和,再进行数据整理,这样就不会出现列找不到或者非数值干扰的问题:

# 先计算全局的ExposedDays和AboveMaxDays总和,加na.rm处理缺失值
total_exposed <- sum(ExposedDays$ExposedDays, na.rm = TRUE)
total_above_max <- sum(ExposedDays$AboveMaxDays, na.rm = TRUE)

# 再执行数据筛选、整合和添加总和列
y <- ExposedDays %>% 
  select(ExposedDays, AboveMaxDays, PatGroup, Ageband, sex, Country) %>% 
  gather("Variable", "Value", ExposedDays, AboveMaxDays) %>% 
  mutate(a = total_exposed, b = total_above_max)

方案2:按分组计算总和(比如按PatGroup/Country分组统计)

如果你需要按某些维度(比如患者组、国家)分别计算总和,可以先分组再计算,最后再整合数据:

y <- ExposedDays %>% 
  select(ExposedDays, AboveMaxDays, PatGroup, Ageband, sex, Country) %>% 
  # 根据你的需求选择分组列,这里示例用PatGroup和Country
  group_by(PatGroup, Country) %>% 
  # 分组计算每组的总和
  mutate(a = sum(ExposedDays, na.rm = TRUE), b = sum(AboveMaxDays, na.rm = TRUE)) %>% 
  ungroup() %>% 
  # 最后执行gather整合数值列
  gather("Variable", "Value", ExposedDays, AboveMaxDays)

这样修改后,就能避开原来的报错,同时实现你想要的功能啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:11:48