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

时间:2018-01-16 11:20:35

标签: r purrr rlang

我有以下数据框

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参数,就应该很容易使用left_join来应用reduce

1 个答案:

答案 0 :(得分:1)

您必须使用其名称映射dfs。一种方法是map2()但是purrr现在有imap(),如果不存在则提供默认名称。最后,由于.key是一个准引号参数,因此您需要取消引用该名称。

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