捕获列表元素并将它们用作名称以创建列表列数据框的函数
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))
}
我有以下数据框
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))
}