R语言报错Error in mutate_impl:仅定义于全数值变量数据框求助
解决
mutate_impl报错:Evaluation error: only defined on a data frame with all numeric variables 咱们来拆解下你遇到的报错根源:
- 你在
gather操作后,原来的ExposedDays和AboveMaxDays列已经被转换成了Variable(存列名)和Value(存对应数值)这两列,此时再在mutate里调用sum(ExposedDays),R根本找不到这个列,自然会出问题。 - 你的数据框里还包含
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
相关产品推荐
相关产品推荐

