gpt4 book ai didi

r - 将变量名称向量传递给 dplyr 中的排列()

转载 作者:行者123 更新时间:2023-12-03 08:36:00 25 4
gpt4 key购买 nike

我要通过arrange() {dplyr} 要排序的变量名称向量。通常我只是输入我想要的变量,但我正在尝试创建一个函数,其中排序变量可以作为函数参数输入。

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 小插图中。下划线后的函数版本使用标准评估,因此您可以将字符串向量等传递给它们。

如果我正确理解您的问题,您可以更换 arrange()arrange_()它会起作用。

具体来说,将字符串向量作为 .dots 传递当你这样做时争论。

> 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

========== 2018 年 3 月更新 ==============

使用 dplyr 中的标准评估版本,如我在此处所示 现在被认为已弃用 .您可以阅读 Hadley's programming vignette对于新的方式。基本上你会使用 !!取消引用一个变量或 !!!取消引用 arrange() 内的变量向量.

当您传递这些列时,如果它们是空的,请使用 quo() 引用它们对于一个变量或 quos()为向量。不要使用引号。请参阅 Akrun 的答案。

如果您的列已经是字符串,则使用 rlang::sym() 为它们命名对于单列或 rlang::syms()为向量。请参阅克里斯托斯的答案。您也可以使用 as.name()对于单列。不幸的是,在撰写本文时,有关如何使用的信息 rlang::sym()还没有进入我上面链接的小插图(根据他的草案,最终它将在“可变参数准引用”部分)。

关于r - 将变量名称向量传递给 dplyr 中的排列(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497751/

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