如何在for循环中使用mutate创建迭代命名的变量?
解决mutate中动态命名变量的问题
你的代码报错是因为在mutate里直接用paste0生成的字符串当变量名赋值,R无法识别这种动态命名的方式,得用dplyr专门的语法来处理。
下面给你两种可行的解决方法:
方法一:用循环配合:=和!!
把原来的赋值符号=换成:=,同时用!!强制解析动态生成的变量名,代码修改后如下:
for (i in 1:5) { iris <- iris %>% mutate(!!paste0("var_", i) := Sepal.Length + i) }
这里!!的作用是把paste0("var_", i)生成的字符串转换成R能识别的变量名,:=则是dplyr里专门用来支持动态变量名赋值的操作符。
方法二:不用循环,批量生成(更推荐)
tidyverse风格更倾向于向量化操作,不用循环也能一次性生成所有变量,效率更高:
iris <- iris %>% mutate(across(1:5, ~ Sepal.Length + .x, .names = "var_{.x}"))
across(1:5)表示遍历1到5的每个数值~ Sepal.Length + .x定义每个新变量的计算规则,.x代表当前遍历的数值.names = "var_{.x}"指定新变量的命名格式,{.x}会自动替换成对应的数值,直接生成var_1到var_5
内容的提问来源于stack exchange,提问作者ANam
相关产品推荐
相关产品推荐

