簡體   English   中英

如何在 R 中將 function 參數與 group_by 結合起來

[英]How to combine function argument with group_by in R

我想將 group_by( ) function 與我的自定義 function 一起使用,但 group_by 中的列名將在我的 ZC1C425268E68385D1AB5074C17A94F4 參數中定義。

查看我的數據的假設示例:

data <- data.frame(ind = rep(c("A", "B", "C"), 4),
                   gender = rep(c("F", "M"), each = 6), 
                   value = sample(1:100, 12))

這就是我想要的結果:

result <- data %>%
   group_by(ind, gender) %>%
   mutate(value = mean(value)) %>%
   distinct()

這就是我試圖讓我的 function 工作的方式:

myFunction <- function(data, set_group, variable){
   result <- data %>%
      group_by(get(set_group)) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      distinct()
}

result3 <- myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
result3

我想允許用戶根據需要定義盡可能多的 set_group 和盡可能多的變量。 我嘗試在 group_by 中使用 get( ) function, all_of( ) function 和 mget( ) function 但沒有一個工作。 有誰知道我該如何編碼?

謝謝!

我們可以across group_by中使用 cross

myFunction <- function(data, set_group, variable){
    data %>%
      group_by(across(all_of(set_group))) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      ungroup %>%
      distinct() 
}

-測試

> myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
# A tibble: 6 × 3
  ind   gender value
  <chr> <chr>  <dbl>
1 A     F       43.5
2 B     F       87.5
3 C     F       67.5
4 A     M       13  
5 B     M       43.5
6 C     M       37.5

另一種選擇是轉換為sym並評估( !!!

myFunction <- function(data, set_group, variable){
    data %>%
      group_by(!!! rlang::syms(set_group)) %>%
      mutate(across(all_of(variable), ~ mean(.x, na.rm = TRUE))) %>%
      ungroup %>%
      distinct() 
}

-測試

> myFunction(data, set_group = c("ind", "gender"), variable = c("value"))
# A tibble: 6 × 3
  ind   gender value
  <chr> <chr>  <dbl>
1 A     F       43.5
2 B     F       87.5
3 C     F       67.5
4 A     M       13  
5 B     M       43.5
6 C     M       37.5

注意:當有單個 object 時使用get ,對於多個對象可以使用mget 但是,最好使用tidyverse函數

暫無
暫無

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

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