基于我之前的问题,我希望能够使用 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,祝你好运