gpt4 book ai didi

r - 如何使用dplyr引用变量而不是列

转载 作者:行者123 更新时间:2023-12-04 23:14:04 29 4
gpt4 key购买 nike

使用 dplyr:filter 时,我经常计算一个包含可行选择的局部变量:

df <- as_tibble(data.frame(id=c("a","b"), val=1:6))
ids <- c("b","c")
filter(df, id %in% ids)
# giving id %in% c("b","c")

但是,如果数据集偶然有一个同名的列,则无法达到预期目的:
df$ids <- "a"
filter(df, id %in% ids)
# giving id %in% "a"

我应该如何明确引用 ids 变量而不是 ids 列?

最佳答案

取消引用 !!告诉filter查看调用环境而不是数据框:

library(tidyverse)

df <- data_frame(id = rep(c("a","b"), 3), val = 1:6)
ids <- c("b", "c")

df %>% filter(id %in% ids)
#> # A tibble: 3 x 2
#> id val
#> <chr> <int>
#> 1 b 2
#> 2 b 4
#> 3 b 6

df <- df %>% mutate(ids = "a")

df %>% filter(id %in% ids)
#> # A tibble: 3 x 3
#> id val ids
#> <chr> <int> <chr>
#> 1 a 1 a
#> 2 a 3 a
#> 3 a 5 a

df %>% filter(id %in% !!ids)
#> # A tibble: 3 x 3
#> id val ids
#> <chr> <int> <chr>
#> 1 b 2 a
#> 2 b 4 a
#> 3 b 6 a

当然,避免此类问题的更好方法是不要在全局环境中放置同名向量。

关于r - 如何使用dplyr引用变量而不是列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659517/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com