【问题标题】:Function that captures the elements of a list and uses them as names to create a list-column data frame捕获列表元素并将它们用作名称以创建列表列数据框的函数
【发布时间】:2018-01-16 11:20:35
【问题描述】:

我有以下数据框

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),但我不知道该怎么做。

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

【问题讨论】:

    标签: r purrr rlang


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多