使用前缀参数在同一函数中将dplyr和plyr分组为数据帧

问题描述 投票:0回答:1

我的函数有些复杂,带有很多参数。无需过多介绍-它使用dplyr和plyr对data.frame进行了一些计算,并返回了一个data.frame并附加了几个结果列。

我对主分组变量有一个参数,对于任何其他组有...。我将这些分组变量与dplyr和plyr一起使用。

dplyr位非常简单-我使用了enquo和!!没有问题。但是我不知道如何在plyr中使用相同的原理。

与dplyr一起使用。

myfun <- function(data, main_group, ...) {
  group <- enquo(main_group)
  add_groups <- enquos(...)
  data %>%
    group_by(!! group, !!! add_groups)
}

mydata <- data.frame(a = 1:3, b = 1:3, c = 1:3, d = 1:3)
myfun(mydata, main_group = a, b, c)

但是没有plyr,我需要两者。

myfun <- function(data, main_group, ...) {
  group <- enquo(main_group)
  add_groups <- enquos(...)
  ddply(data, .(!! group, !!! add_groups), .fun = function(X) { data.frame(result1 = 1, result2 = 1, result3 = 1) })
}
myfun(mydata, main_group = a, b, c)

我想,如果我可以在ddply调用中使用字符串变量名称的向量,这将是最简单的。

ddply(mydata, c("a", "b", "c"), .fun = function(X) { data.frame(result1 = 1, result2 = 1, result3 = 1) })

但是,如果参数值为a,b,c,如何在函数内获取c(“ a”,“ b”,“ c”)?

r dplyr plyr nse
1个回答
0
投票

请不要使用plyr,它已退休且已过时。有关类似的功能,请参见purrr

但是,我相信您可以使用deparse(substitute())解决您的问题。例如,>

myfun <- function(data, main_group, ...) {
  group <- deparse(substitute(main_group))
  add_groups <- as.character(as.list(match.call(expand.dots = FALSE)$...))
  ddply(data, c(group, add_groups), .fun = function(X) { data.frame(result1 = 1, result2 = 1, result3 = 1) })
}
© www.soinside.com 2019 - 2024. All rights reserved.