0

我有以下数据框

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)
}

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

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

4

1 回答 1

1

你必须用他们的名字映射 dfs。一种方法是,map2()但 purrr 现在imap()可以提供默认名称(如果不存在)。最后,由于.key是一个准引用参数,您需要取消引用该名称。

my_fun <- function(l) {
 imap(l, function(df, name) nest(df, .key = !!name))
}
于 2018-01-16T14:35:05.010 回答