簡體   English   中英

如何在沒有變量的情況下以編程方式使用 dplyr cross()?

[英]How can I use dplyr across() programmatically on no variables?

問題:

我想以編程方式使用cross across() ,這樣如果NULL或一個空字符串被傳遞給它,function就不會失敗。 這可能使用了諸如group_by_at()之類的函數的作用域變體,但我想使用 cross() 使其巧妙地工作(即沒有 if 語句across()

另請注意,如果留空,當前across()將影響所有列。 我不確定這樣做的動機是什么; 對我來說,如果沒有列受到影響會更有意義。

例子

這是一個使用函數計算變量y平均值的快速示例。 傳遞分組變量適用across() group_by_at() ,但不適用於 cross() ,如下所示:

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

代表 package (v0.3.0) 於 2020 年 7 月 14 日創建

像這樣使用.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")
}
 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM