R语言不使用mutate函数创建可复用新变量的方法及报错解决
R使用dplyr创建可复用新变量的正确方法
问题核心原因
- 未将dplyr管道操作的计算结果赋值给变量保存,仅临时输出到控制台,自然无法后续调用生成的新列
mutate为数据框操作函数,首个参数必须传入待处理的数据框,未指定数据源的情况下直接写列名计算,R会默认从全局环境搜索对应对象,找不到就会抛出object not found报错
正确实现方式
方法1:dplyr管道+变量赋值
library(dplyr) # 初始化数据 starwars.df <- starwars # 计算后将结果赋值回变量,新列会永久保存在数据框中 starwars.df <- starwars.df %>% mutate( # 无需单独写name列,仅声明要新增的列即可 bmi = mass / ((height / 100) ^ 2), BMI_Value = ifelse(bmi > median(bmi, na.rm = TRUE), "Above Average BMI", "Below Average BMI") ) %>% select(name, contains("bmi")) # 后续可直接调用新列 head(starwars.df$bmi) head(starwars.df$BMI_Value)
方法2:基础R语法直接新增列
# 初始化数据 starwars.df <- starwars # 直接为数据框新增bmi列,明确指定列所属的数据框 starwars.df$bmi <- starwars.df$mass / ((starwars.df$height / 100) ^2) # 新增BMI_Value列 starwars.df$BMI_Value <- ifelse(starwars.df$bmi > median(starwars.df$bmi, na.rm = TRUE), "Above Average BMI", "Below Average BMI")
注意事项
- 所有涉及数据框列的计算,都需要明确指定对应的数据框来源,要么在dplyr的管道操作中默认使用上一步传入的数据框,要么用
数据框$列名的写法明确声明 - 临时计算的结果如果需要后续复用,必须赋值给变量保存,仅运行计算代码不会自动留存结果
内容的提问来源于stack exchange,提问作者thewal
相关产品推荐
相关产品推荐

