传递一个变量名称向量来排列()在dplyr中 [英] Pass a vector of variable names to arrange() in dplyr
问题描述
我想通过 arrange()
{dplyr}一个变量名称向量进行排序。通常我只输入我想要的变量,但是我试图做一个函数,其中可以输入排序变量作为函数参数。
I want to pass arrange()
{dplyr} a vector of variable names to sort on. Usually I just type in the variables I want, but I'm trying to make a function where the sorting variables can be input as a function parameter.
df <- structure(list(var1 = c(1L, 2L, 2L, 3L, 1L, 1L, 3L, 2L, 4L, 4L
), var2 = structure(c(10L, 1L, 8L, 3L, 5L, 4L, 7L, 9L, 2L, 6L
), .Label = c("b", "c", "f", "h", "i", "o", "s", "t", "w", "x"
), class = "factor"), var3 = c(7L, 5L, 5L, 8L, 5L, 8L, 6L, 7L,
5L, 8L), var4 = structure(c(8L, 5L, 1L, 4L, 7L, 4L, 3L, 6L, 9L,
2L), .Label = c("b", "c", "d", "e", "f", "h", "i", "w", "y"),
class = "factor")), .Names = c("var1", "var2", "var3", "var4"),
row.names = c(NA, -10L), class = "data.frame")
# this is the normal way to arrange df with dplyr
df %>% arrange(var3, var4)
# but none of these (below) work for passing a vector of variables
vector_of_vars <- c("var3", "var4")
df %>% arrange(vector_of_vars)
df %>% arrange(get(vector_of_vars))
df %>% arrange(eval(parse(text = paste(vector_of_vars, collapse = ", "))))
Hadley在帮助文件中没有这么明显 - 只有在他的NSE小插曲。函数的版本后跟下划线使用标准评估,所以您传递它们的字符串向量等。
Hadley hasn't made this obvious in the help file--only in his NSE vignette. The versions of the functions followed by underscores use standard evaluation, so you pass them vectors of strings and the like.
如果我正确理解您的问题,您可以替换 arrange()
与 arrange _()
,它将工作。
If I understand your problem correctly, you can just replace arrange()
with arrange_()
and it will work.
====编辑===
==== edit ===
当您输入 .dots
参数时,传递字符串向量
Pass the vector of string as the .dots
argument when you do it.
> df %>% arrange_(.dots=c("var1","var3"))
var1 var2 var3 var4
1 1 i 5 i
2 1 x 7 w
3 1 h 8 e
4 2 b 5 f
5 2 t 5 b
6 2 w 7 h
7 3 s 6 d
8 3 f 8 e
9 4 c 5 y
10 4 o 8 c
这篇关于传递一个变量名称向量来排列()在dplyr中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!