gpt4 book ai didi

r - 使用三个点/省略号 (...) 作为 dplyr 和 merge() 的列名

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

我有一个函数,我首先使用 group_by()传递给函数的多个列名,然后合并这些相同的列名。

我可以做到 group_by()使用 vars <- enquos(…)其次是 group_by(!!!vars) .这要求传递给函数的列名不在引号中,否则 group_by()创建包含引号的新列名。

我可以使用 vars <- list(…) 进行合并其次是 merge(x, y, by = paste(vars)) .然而,这需要列名 在引号中,否则 list(…)生成:

error (object 'x' not found).

如何同时处理这两种情况?

例子:

example <- function(...) {
vars1 <- enquos(...) #doesn't work unless (...) isn't in quotes
#vars2 <- list(...) #doesn't work unless (...) is in quotes

df1 <- mtcars %>%
group_by(!!!vars1) %>%
summarise(Mean = mean(mpg))

df2 <- mtcars %>%
group_by(!!!vars1) %>%
summarise(Median = median(hp))

merged <- merge(df1, df2, by = "cyl") #for functioning example only, want by to be (...)
#merged <- merge(df1, df2, by = paste(vars2)) #doesn't work unless (...) is in quotes
return(merged)
}

out <- example(cyl)

最佳答案

这是一个使用引用变量作为输入的版本:

example <- function(...) {
vars1 <- syms(...)
vars2 <- list(...)
df1 <- mtcars %>%
group_by(!!!vars1) %>%
summarise(Mean = mean(mpg))

df2 <- mtcars %>%
group_by(!!!vars1) %>%
summarise(Median = median(hp))

merged <- merge(df1, df2, by = vars2[[1]])
return(merged)

}

example("cyl")
# cyl Mean Median
#1 4 26.66 91.0
#2 6 19.74 110.0
#3 8 15.10 192.5

example(c("cyl", "am"))
# cyl am Mean Median
#1 4 0 22.90 95.0
#2 4 1 28.07 78.5
#3 6 0 19.12 116.5
#4 6 1 20.57 110.0
#5 8 0 15.05 180.0
#6 8 1 15.40 299.5

关于r - 使用三个点/省略号 (...) 作为 dplyr 和 merge() 的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926898/

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