r - 使用 dtplyr 时,使用函数输入中的列作为 group_by 变量

标签 r dplyr dtplyr

当尝试使用 dtplyr 按组汇总列时,分组似乎不起作用。由于组变量是我的函数的输入,因此我尝试使用 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

最佳答案

我们可以使用.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)

关于r - 使用 dtplyr 时,使用函数输入中的列作为 group_by 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66679970/

相关文章:

R - 在没有分配的情况下构建具有多列的数据框

r - 为什么我在计数和过滤后丢失了我的 NA (dplyr)

r - 如果所有列都包含 NA,则删除行中的 NA 值,但保留至少包含一个结果的行

r - 识别并计算法术(每组中的特殊事件)

R:大向量的高效迭代子集和过滤

R 正则表达式用于匹配列/向量中逗号分隔的部分

r - 如何在 R 中绘制 kmeans 簇并显示质心?

r - 贬低 R data.table : list of columns

r - 如何在包中使用 data.table 而不导入所有函数?