gpt4 book ai didi

r - 为什么 dplyr filter() 在函数内不起作用(即使用变量作为列名)?

转载 作者:行者123 更新时间:2023-12-04 04:54:42 25 4
gpt4 key购买 nike

使用 dplyr 函数过滤、分组和改变数据的函数。基本管道序列在函数之外工作得很好,那是我使用真正的列名的地方。把它放在一个函数中,其中列名是一个变量,其中一些函数可以工作,但有些函数最明显的是 dplyr::filter()。例如:

var1 <- c('yes', NA, NA, 'yes', 'yes', NA, NA, NA, 'yes', NA, 'no', 'no', 'no', 'maybe', NA, 'maybe', 'maybe', 'maybe')

var2 <- c(1:18)

df <- data.frame(var1, var2)

这工作正常(即过滤器NA):
df%>%filter(!is.na(var1))

……但这不是:
x <- "var1"

df%>%filter(!is.na(x))

...但这确实:
df%>%select(x)

需要专门过滤掉NA。

试过 get("x"),不好,切片:
df[!is.na(x),]

……也不好。

关于如何传递变量以在函数内部(或外部)进行过滤以及为什么变量与其他 dplyr 函数一起使用的任何想法?

最佳答案

我们可以使用 sym转换为符号,然后使用 UQ评估它

library(rlang)
library(dplyr)
df %>%
filter(!is.na(UQ(sym(x))))
# var1 var2
#1 yes 1
#2 yes 4
#3 yes 5
#4 yes 9
#5 no 11
#6 no 12
#7 no 13
#8 maybe 14
#9 maybe 16
#10 maybe 17
#11 maybe 18

关于r - 为什么 dplyr filter() 在函数内不起作用(即使用变量作为列名)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45261356/

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