使用group_by和管道函数循环遍历数据帧列表?

时间:2018-10-13 13:20:08

标签: r

我有一个数据框列表,我试图将一个适用于单个数据框的脚本应用到该列表。 脚本的一部分同时使用管道和group_by:

df2 <- df1 %>%
group_by (col1) %>%
summarise(newcol = sum(col2))

我已经尝试过使用lapply进行各种循环或变体,但是还没有找到一种方法来处理一系列数据框,而这些数据框可能类似于:

mylist2 <- mylist1 %>%
group_by (col1) %>%
summarise(newcol = sum(col2))

但是显然可以改变以使用循环或不适用于。我可能在这里缺少一些简单的东西,但希望能有所帮助。谢谢

PS-我曾考虑过提供清单中的数据,但无法提供可再现的样品。

1 个答案:

答案 0 :(得分:2)

这是一种tidyverse的方式。

# generate some data
mylist1 <- replicate(2, data.frame(col1 = rep(letters[1:2], 2),
                                   col2 = 1:4), 
                     simplify = FALSE)

library(purrr)
library(dplyr)
mylist1 %>%
  map(., ~ group_by(., col1) %>%
        summarise(new_col = sum(col2)))
#[[1]]
# A tibble: 2 x 2
#  col1  new_col
#  <fct>   <int>
#1 a           4
#2 b           6

#[[2]]
# A tibble: 2 x 2
#  col1  new_col
#  <fct>   <int>
#1 a           4
#2 b           6

base R中,您可以尝试lapplytapply

lapply(mylist1, function(x)
  tapply(X = x[["col2"]], INDEX = x[["col1"]], FUN = 'sum'))
#[[1]]
#a b 
#4 6 

#[[2]]
#a b 
#4 6