如何解决如何使用字符串变量访问 mutate() 中的现有列
我已经读过Use dynamic variable names in `dplyr` 但我的问题是使用存储为字符串变量的列名来改变已经存在的列。
data <- tibble::tribble(
~colA,~colB,1,2,3,4
)
namestring <- "colA"
----
> data
# A tibble: 2 x 2
colA colB
<dbl> <dbl>
1 1 2
2 3 4
> namestring
[1] "colA"
现在我想使用 colA
namestring
没有namestring的想要的输出是这样的。
data %>%
dplyr::mutate(colA = colB * 100)
## A tibble: 2 x 2
# colA colB
# <dbl> <dbl>
#1 200 2
#2 400 4
但是使用 dplyr 编程时出现错误
namestring <- "colA"
data %>%
dplyr::mutate(.data[[namestring]] = colB + 2)
# Error: unexpected '=' in:
# "data %>%
# dplyr::mutate(.data[[namestring]] ="
filter
和 select
在 LHS 上使用 .data[[string]]
不会产生相同类型的错误
data %>%
dplyr::filter(.data[[namestring]] == 3)
## A tibble: 1 x 2
# colA colB
# <dbl> <dbl>
#1 3 4
解决方法
我们可以将 :=
与 !!
一起使用
library(dplyr)
data %>%
mutate(!! namestring := colB * 100)
-输出
# A tibble: 2 x 2
# colA colB
# <dbl> <dbl>
#1 200 2
#2 400 4
或者它可以在 across
data %>%
mutate(across(all_of(namestring),~ colB* 100))
# A tibble: 2 x 2
# colA colB
# <dbl> <dbl>
#1 200 2
#2 400 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。