r - 在 dplyr::mutate 中传递一个字符串作为变量名
问题描述
我一直在阅读这篇关于如何在 dplyr 中使用对变量的字符串引用的 SO 帖子。
我想根据字符串输入改变现有列:
var <- 'vs'
my_mtcars <- mtcars %>%
mutate(get(var) = factor(get(var)))
错误:意外'=' in:“my_mtcars <- mtcars %>% mutate(get(var) =
也试过:
my_mtcars <- mtcars %>%
mutate(!! rlang::sym(var) = factor(!! rlang::symget(var)))
这导致了完全相同的错误消息。
如何根据在 var 变量中传递字符串“vs”进行变异来执行以下操作?
# works
my_mtcars <- mtcars %>%
mutate(vs = factor(vs))
解决方案
可以使用:=
while 评估 ( !!
) 并使用转换为sym
bol 并评估赋值的 rhs来执行此操作
library(dplyr)
my_mtcars <- mtcars %>%
mutate(!! var := factor(!! rlang::sym(var)))
class(my_mtcars$vs)
#[1] "factor"
或者不用想太多,使用mutate_at
,它可以带入字符串vars
并应用function
感兴趣的
my_mtcars2 <- mtcars %>%
mutate_at(vars(var), factor)
推荐阅读
- apache-spark - LoadIncrementalHFiles:分组 HFiles 时发生拆分
- json - 来自带有嵌套键的 Json 字符串的 Spark 数据帧
- xml - XPath 错误试图确定是否有至少一个不为空的子节点(具有字符串值)
- javascript - recoil 无法处理异步选择器的错误
- python - 解析站点时单击按钮
- javascript - 是什么导致此表单验证器类中未定义的无法读取属性“preventDefault”?
- python - 使用 kivy、openCV、python 编写的 Android 应用程序的 Buildozer 错误,它使用相机
- python - 雷达图中的置信区间(区域未闭合)
- laravel - 供应商/laravel/framework/src/Illuminate/Database/Connection.php:678
- php - 致命错误:未捕获的 ArgumentCountError:绑定变量的数量与准备好的语句中的字段数量不匹配