这是一个使用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函数一起使用?
select
接受未加引号和加引号的字符串,例如df%>% select('var1')
和df%>% select(var1)
。这不仅适用于filter
。如果您想要一些汇总信息,则必须执行相同的步骤。 - akrunrlang
中的,但是我认为如果你安装了tidyverse
并加载了包,它应该会被加载。假设你想要总结df%>%summarise(count = sum(!is.na(UQ(sym(x)))))
。 - akrunx
进行聚合,那么可以使用gather(df, key, value, -one_of(x))
。 - akrun