使用字符串变量作为表达式的 Dplyr 重命名
Dplyr rename using string variable as expression
我希望能够使用 df %>% rename(string_var)
之类的字符串和 string_var = "A=B"
.
之类的字符串重命名变量
很多类似的问题,none相当适用或参考弃用dplyr
。
从像
这样的数据框开始
df = data.frame(
A=1:4,
B=5:8
)
我可以使用字符串变量作为条件进行过滤:
s = "A<4 & B>5"
来自
> df %>% filter(!!rlang::parse_expr(s))
A B
1 2 6
2 3 7
或
> df %>% filter(eval(str2expression(s)))
A B
1 2 6
2 3 7
我不知道如何对 rename
做同样的事情。
> s = "D=A"
> df %>% rename(!!rlang::parse_expr(s))
Error: object 'A' not found
> df %>% rename(eval(str2expression(s)))
Error: object 'A' not found
我也试过了
> l = list(D="A")
> l
$D
[1] "A"
> df %>% rename(l)
Note: Using an external vector in selections is ambiguous.
i Use `all_of(l)` instead of `l` to silence this message.
i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
Error: Must rename columns with a valid subscript vector.
x Subscript has the wrong type `list`.
i It must be numeric or character.
Run `rlang::last_error()` to see where the error occurred.
> df %>% rename(!!l)
Error: Must rename columns with a valid subscript vector.
x Subscript has the wrong type `list`.
i It must be numeric or character.
Run `rlang::last_error()` to see where the error occurred.
您的道路非常正确。我们可以使用 !!!
运算符来解析使用 rename
.
的命名列表
> s = list(D = 'A')
> df %>% rename(!!!s)
D B
1 1 5
2 2 6
3 3 7
4 4 8
我希望能够使用 df %>% rename(string_var)
之类的字符串和 string_var = "A=B"
.
很多类似的问题,none相当适用或参考弃用dplyr
。
从像
这样的数据框开始df = data.frame(
A=1:4,
B=5:8
)
我可以使用字符串变量作为条件进行过滤:
s = "A<4 & B>5"
来自
> df %>% filter(!!rlang::parse_expr(s))
A B
1 2 6
2 3 7
或
> df %>% filter(eval(str2expression(s)))
A B
1 2 6
2 3 7
我不知道如何对 rename
做同样的事情。
> s = "D=A"
> df %>% rename(!!rlang::parse_expr(s))
Error: object 'A' not found
> df %>% rename(eval(str2expression(s)))
Error: object 'A' not found
我也试过了
> l = list(D="A")
> l
$D
[1] "A"
> df %>% rename(l)
Note: Using an external vector in selections is ambiguous.
i Use `all_of(l)` instead of `l` to silence this message.
i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
Error: Must rename columns with a valid subscript vector.
x Subscript has the wrong type `list`.
i It must be numeric or character.
Run `rlang::last_error()` to see where the error occurred.
> df %>% rename(!!l)
Error: Must rename columns with a valid subscript vector.
x Subscript has the wrong type `list`.
i It must be numeric or character.
Run `rlang::last_error()` to see where the error occurred.
您的道路非常正确。我们可以使用 !!!
运算符来解析使用 rename
.
> s = list(D = 'A')
> df %>% rename(!!!s)
D B
1 1 5
2 2 6
3 3 7
4 4 8