【问题标题】:double nesting with tidyverse and purrr使用 tidyverse 和 purrr 进行双重嵌套
【发布时间】:2017-06-29 23:27:08
【问题描述】:

我想创建一个双嵌套数据结构,其中 c 嵌套在 a 中,a 进一步嵌套在 id 中。

library(tidyverse)
m<-data_frame(id=c(100,101,100,101,100,101,100,101),
            a=c("A","A","B","B","A","A","D","D"),
            c=c(1:8))
m2 <- m %>%
group_by(id) %>%
nest(.key = one)

所以第一个巢是可以的。但我想进一步嵌套在 m2$one 中。

知道我该怎么做吗?

我可以走了:

        m3 <- m2 %>%
              mutate(
                     two=map(m2$one,~(.x %>% 
                                      group_by(a) %>%
                                      nest(.key=two)))
              )

但这会在 m3 中提供另一列,而不是在 m2$one 中。

【问题讨论】:

  • 您应该考虑“传统” R ;例如,这是split 的工作并列出结构。我不能在这里尝试,但像 lapply(split(m, m$id), function(df) split(df, df$a)) 这样的东西可能是一个起点
  • 将您通过mutate 生成的列命名为“one”而不是“two”是否会给您想要的输出?
  • @aosmith 是的——它奏效了。谢谢。如果你写出来,我会批准。

标签: r purrr tidyverse


【解决方案1】:

您可以将单嵌套列 one 替换为 mutate 中的新双嵌套列,方法是为结果分配相同的名称 (one),而不是像您一样创建新列。

m2 %>%
    mutate(one = map(one, ~.x %>% 
                        group_by(a) %>%
                        nest(.key = two)))

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2020-08-24
    • 2020-07-21
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2018-07-15
    相关资源
    最近更新 更多