捕获列表元素并将它们用作名称以创建列表列数据框的函数

Function that captures the elements of a list and uses them as names to create a list-column data frame

我有以下数据框

d1 <- tibble(condition = c("a", "b"), x = c(1, 1)) %>% group_by(condition)
d2 <- tibble(condition = c("a", "b"), y = c(2, 2)) %>% group_by(condition)
d3 <- tibble(condition = c("a", "b"), z = c(3, 3)) %>% group_by(condition)

我想构建数据框d

d1_nest <- d1 %>% nest(.key = d1)
d2_nest <- d2 %>% nest(.key = d2)
d3_nest <- d3 %>% nest(.key = d3)

d <- d1_nest %>% left_join(d2_nest) %>% left_join(d3_nest)

我想用一个函数来做到这一点

my_fun(list(d1, d2, d3))

我从

开始
my_fun <- function(l) {
 l %>% map(nest)
}

问题是我想在 nest 的参数 .key 中提供数据框的名称(d1、d2 和 d3),但我不知道该怎么做。

我想一旦我可以包含 .key 参数,使用 reduce 应用 left_join 应该很容易。

您必须将 dfs 映射到它们的名称。一种方法是 map2() 但 purrr 现在有 imap() 如果不存在则给出默认名称。最后,由于 .key 是一个半引用参数,您需要取消对名称的引用。

my_fun <- function(l) {
 imap(l, function(df, name) nest(df, .key = !!name))
}