我有一个数据框列表,我试图将一个适用于单个数据框的脚本应用到该列表。 脚本的一部分同时使用管道和group_by:
df2 <- df1 %>%
group_by (col1) %>%
summarise(newcol = sum(col2))
我已经尝试过使用lapply进行各种循环或变体,但是还没有找到一种方法来处理一系列数据框,而这些数据框可能类似于:
mylist2 <- mylist1 %>%
group_by (col1) %>%
summarise(newcol = sum(col2))
但是显然可以改变以使用循环或不适用于。我可能在这里缺少一些简单的东西,但希望能有所帮助。谢谢
PS-我曾考虑过提供清单中的数据,但无法提供可再现的样品。
答案 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
中,您可以尝试lapply
和tapply
lapply(mylist1, function(x)
tapply(X = x[["col2"]], INDEX = x[["col1"]], FUN = 'sum'))
#[[1]]
#a b
#4 6
#[[2]]
#a b
#4 6