【问题标题】:use column from function input for group_by variable when using dtplyr使用 dtplyr 时,将函数输入中的列用于 group_by 变量
【发布时间】:2023-04-06 02:01:01
【问题描述】:

尝试使用 dtplyr 按组汇总列时,分组似乎不起作用。由于 group 变量是我的函数的输入,我尝试使用 group_by_ 只是为了收到错误消息。

数据:

df <- data.frame(
  id=c(1,1,1,2,2,2,3,3,3),
  year=c(2014, 2015, 2016, 2015, 2015, 2016, NA, NA, 2016),
  code=c(1,2,2, 1,2,3, 3,4,5),
  dv1=1:9,
  dv2=2:10
) %>% as.data.table()

cols <- c("dv1", "dv2")

> df
   id year code dv1 d2
1:  1 2014    1   1  2
2:  1 2015    2   2  3
3:  1 2016    2   3  4
4:  2 2015    1   4  5
5:  2 2015    2   5  6
6:  2 2016    3   6  7
7:  3   NA    3   7  8
8:  3   NA    4   8  9
9:  3 2016    5   9 10

功能:

for(i in seq_along(columns)) {
 sub1 <- df %>% 
   select("id", columns[i], group) %>%
   group_by(group) %>%
   summarise(mean=mean(.data[[columns[i]]], na.rm=T), sd=sd(.data[[columns[i]]], na.rm=T)) %>%
   ungroup() %>%
   as_tibble() 
 print(sub1)
}
}

test(data=df, columns=cols, group="year")

# A tibble: 1 x 3
  group  mean    sd
  <chr> <dbl> <dbl>
1 year      5  2.74
# A tibble: 1 x 3
  group  mean    sd
  <chr> <dbl> <dbl>
1 year      6  2.74

【问题讨论】:

    标签: r dplyr dtplyr


    【解决方案1】:

    我们可以使用.data

    f<- function(dat, grouping_var) {
         dat %>%
             group_by(.data[[grouping_var]]) %>%
             summarise(N = n())
      }
    

    -测试

    f(iris, "Species")
    # A tibble: 3 x 2
    #  Species        N
    #* <fct>      <int>
    #1 setosa        50
    #2 versicolor    50
    #3 virginica     50
    

    使用 OP 的示例数据

    library(purrr)
    map(cols, dat = df, .f = f)
    

    【讨论】:

      【解决方案2】:

      这是一个reprex,我想这与您正在寻找的内容相似。这不是最性感的解决方案,但它会起作用:

      library(tidyverse)
      f <- function(grouping_var) {
          iris %>%
              group_by(!!sym(grouping_var)) %>%
              summarize(N = n())
      }
      
      f('Species')
      #> # A tibble: 3 x 2
      #>   Species        N
      #> * <fct>      <int>
      #> 1 setosa        50
      #> 2 versicolor    50
      #> 3 virginica     50
      

      reprex package (v1.0.0) 于 2021-03-17 创建

      【讨论】:

        猜你喜欢
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-09
        相关资源
        最近更新 更多