【发布时间】:2018-07-11 14:27:21
【问题描述】:
我有以下数据框:
df <- data.frame(id = paste0('id', sample(c(1:4),80000, replace = TRUE)), date = as.Date(rbeta(80000, 0.7, 10) * 100, origin = "2016-01-01"),
variant = sample(c(0:1), 80000, replace = TRUE), type = sample(paste0(LETTERS[1:3],LETTERS[1]), 80000, TRUE), code = sample(letters[1:2], 80000, TRUE),
level = sample(LETTERS[1:8], 80000, TRUE), number = sample(c(1:100), 80000, replace = TRUE) )
接下来,我多次拆分数据框并将它们(加上原始 df)组合到一个列表中:
dfs <- split(df,df$id)
df2 <- lapply(dfs, function(x) split(x,x$type))
df3 <- lapply(dfs, function(x) split(x,x$code))
df4 <- lapply(dfs, function(x) split(x,x$level))
df_all <- list(dfs,df2,df3,df4)
因此,我首先按 Id 拆分数据帧,然后在几个条件下拆分它们:无、类型、代码和级别。其中“none”意味着我不会进一步拆分它。
我的第一个问题:有没有更快/更清洁的方法来实现这一目标?
第二个问题:如何将函数应用于此列表的每个元素?它可能与 lapply 有关,但我不知道如何,因为嵌套列表的数量会有所不同。因此,为了更清楚,我想知道如何将我的功能应用于:
df_all[[1]]$id1
df_all[[1]]$id2
df_all[[1]]$id3
df_all[[1]]$id4
df_all[[2]]$id1$AA
df_all[[2]]$id1$BA
df_all[[2]]$id1$CA
df_all[[2]]$id2$AA
etc.
我的功能如下:
func <- function(x){
x <- x %>%
group_by(variant) %>%
summarise(H = sum(number)) %>%
ungroup()
【问题讨论】:
-
“我如何将一个函数应用到这个列表的每个元素上?” 这真的取决于你应用什么函数以及你想用列表。这个问题的答案也可能首先影响您应该如何拆分列表元素。你能重申一下你想通过这个实现的目标吗?
-
@user 我用我想应用的函数编辑了这个问题。
-
预期的输出是什么?一个列表列表,每个元素都有一个摘要 data.frame?
标签: r lapply nested-lists