r语言 - 如何在将未确定的变量数传递给 dplyr 中的函数时使用pivot_wider



基于我之前的问题,我希望能够使用 pivot_wider 引用一列,但不清楚语法。

可重现的示例

例如,假设我们想创建一个函数,该函数为我们提供以下内容的等效输出,但具有可变数量的输入group_by:

# String inputs
grp1 <- "cyl"
grp2 <- "carb"
# 2 variables input
mtcars %>% 
group_by(.data[[grp1]], .data[[grp2]]) %>% 
summarize(mean_hp = mean(hp, na.rm = TRUE)) %>% 
pivot_wider(., names_from = .data[[grp1]], values_from = mean_hp)
# A tibble: 6 x 4
carb   `4`   `6`   `8`
<dbl> <dbl> <dbl> <dbl>
1     1  77.4  108.   NA 
2     2  87     NA   162.
3     4  NA    116.  234 
4     6  NA    175    NA 
5     3  NA     NA   180 
6     8  NA     NA   335 

为了获得可变数量的输入(即,仅grp1,grp1,grp2和grp 3(,上一个问题指出解决方案是使用省略号,如下所示:

# String inputs
grp1 <- "cyl"
grp2 <- "carb"
# Create simple function
car_fx <- function(df, ...) {
output <- df %>% 
group_by_at(c(...)) %>% 
summarize(mean_hp = mean(hp, na.rm = TRUE))
}
# Works with variable number of inputs
(car_fx(mtcars, grp1, grp2))
(car_fx(mtcars, grp1))

在我的实际函数中,我还想透视数据,并且通常使用第一个输入变量(例如,grp1(执行此操作,如上pivot_wider示例中所示。 我将如何使用椭圆解来pivot_wider可变数量的输入? 具体来说,我将如何仅使用 1 个变量输入来执行此操作,以及如何使用 2 个变量输入并引用要透视的第二个变量来执行此操作? 我尝试将此作为引用第一个变量的一种方式,但它不起作用:

# Doesn't work
car_fx <- function(df, ...) {
output <- df %>% 
group_by_at(c(...)) %>% 
summarize(mean_hp = mean(hp, na.rm = TRUE)) %>% 
pivot_wider(., names_from = names(.[[1]]), values_from = mean_hp)
}

我认为这应该有效

car_fx <- function(df, ...) {
output <- df %>% 
group_by_at(c(...)) %>% 
summarize(mean_hp = mean(hp, na.rm = TRUE)) %>% 
pivot_wider(., names_from = c(...)[1], values_from = mean_hp)
output
}

您可以根据自己的喜好更改 [1],如果您需要围绕 3 组的特定行为,欢迎来到 if hell,祝你好运

最新更新