如何在向dplyr中的函数传递未知数量的变量时更广泛地使用pivot_

如何在向dplyr中的函数传递未知数量的变量时更广泛地使用pivot_,r,dplyr,pivot,tidyverse,R,Dplyr,Pivot,Tidyverse,基于我前面的问题,我希望能够使用pivot_更广泛地引用一个专栏,但不清楚语法 可复制示例 例如,假设我们想要创建一个函数,该函数为我们提供以下等价的输出,但具有一个可变的数字输入到组_by: # String inputs grp1 <- "cyl" grp2 <- "carb" # 2 variables input mtcars %>% group_by(.data[[grp1]], .data[[grp2]]) %>% summarize(mean_

基于我前面的问题,我希望能够使用pivot_更广泛地引用一个专栏,但不清楚语法

可复制示例

例如,假设我们想要创建一个函数,该函数为我们提供以下等价的输出,但具有一个可变的数字输入到组_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%
汇总(平均值=平均值(hp,na.rm=真))%>%
轴宽(,名称从=.data[[grp1]],值从=平均值从=hp)
#一个tibble:6x4
碳水化合物'4``6``8`
1     1  77.4  108.   NA
287NA 162。
3 4 NA 116。234
4 6 NA 175 NA
5 3 NA 180
6 8 NA 335
为了获得可变数量的输入(即,仅grp1、grp1、grp2和GRP3),前面的问题指出,解决方案是使用如下椭圆:

# 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我认为这应该有效

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
}
car\u fx%
汇总(平均值=平均值(hp,na.rm=真))%>%
枢轴宽度(,名称从=c(…)[1],值从=mean从=hp)
输出
}

您可以根据自己的喜好更改[1],如果您需要在3个小组中进行特定的行为,欢迎来到if else hell,祝您好运,这正是我所需要的。谢谢。没问题,请考虑投票。
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
}