gpt4 book ai didi

r - 如何在没有变量的情况下以编程方式使用 dplyrcross()?

转载 作者:行者123 更新时间:2023-12-03 16:34:17 24 4
gpt4 key购买 nike

问题:
我想用across()以编程方式,以便如果,例如NULL或者一个空字符串传递给它,该函数不会失败。这可能使用了函数的作用域变体,例如 group_by_at() ,但我想使用 across() 让它整齐地工作(即没有 if 语句) .
另请注意,当前 across()如果留空,将影响所有列。我不确定这样做的动机是什么;对我来说,如果没有列受到影响会更有意义。
例子
这是一个使用函数计算变量均值的快速示例 y .传递分组变量适用于 group_by_at() ,但不是 across()如图所示:

my_df <- tibble("x" = c("a", "a", "b", "b"), y = 1:4)

compute_mean1 <- function(df, grouping) { # compute grouped mean with across()
df %>%
group_by(across(all_of(grouping))) %>%
summarise(y = mean(y), .groups = "drop")
}

compute_mean2 <- function(df, grouping) { # compute grouped mean with group_by_at()
df %>%
group_by_at(grouping) %>%
summarise(y = mean(y), .groups = "drop")
}


compute_mean1(my_df, "x")
#> # A tibble: 2 x 2
#> x y
#> <chr> <dbl>
#> 1 a 1.5
#> 2 b 3.5
compute_mean1(my_df, NULL)
#> Error: `vars` must be a character vector.
compute_mean2(my_df, "x")
#> # A tibble: 2 x 2
#> x y
#> <chr> <dbl>
#> 1 a 1.5
#> 2 b 3.5
compute_mean2(my_df, NULL)
#> # A tibble: 1 x 1
#> y
#> <dbl>
#> 1 2.5
创建于 2020-07-14 由 reprex package (v0.3.0)

最佳答案

使用 .add=TRUE像这样:

compute_mean3 <- function(df, grouping) { # compute grouped mean with across()
df %>%
group_by(across(all_of(grouping)), .add = TRUE) %>%
summarise(y = mean(y), .groups = "drop")
}

关于r - 如何在没有变量的情况下以编程方式使用 dplyrcross()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62898859/

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