将列名作为字符串传递不适用于filter(),只能用于filter()

问题描述 投票:0回答:1

给定以下数据框:

df <- data.frame(a=c(NA,1,2), b=c(3,4,5))

我可以在

select
中将列名称作为字符串传递:

> df %>% select("a")
   a
1 NA
2  1
3  2

或者我可以使用带有

select
的符号名称。这样也好:

> df %>% select(a)
   a
1 NA
2  1
3  2

pull
也接受两者:

> df %>% pull("a")
[1] NA  1  2
> df %>% pull(a)
[1] NA  1  2

但是我不能将字符串与

filter
:

一起使用
> df %>% filter("a"==1)
[1] a b
<0 rows> (or 0-length row.names)

仅象征性名称:

> df %>% filter(a==1)
  a b
1 1 4

为什么它适用于

select
而不适用于
filter

不应该保持一致吗?

r dataframe tidyverse data-manipulation
1个回答
0
投票

你可以使用rlang

df %>% 
  filter(!!rlang::sym('a') == 1)
© www.soinside.com 2019 - 2024. All rights reserved.