【问题标题】:unlisting a list while keeping the indices在保留索引的同时取消列出列表
【发布时间】:2019-04-23 17:13:11
【问题描述】:

我有一个列表,其中可以包含空条目、包含一个元素的条目和包含多个元素的条目。

l1 = list(integer(0), 11L, integer(0), integer(0), 11L, 11L, c(6L, 
36L), 16L, 16L, integer(0), integer(0))

我想取消列出 l1 并创建一个数据框,对于空元素,索引根本不会出现,而对于多个元素,索引会出现多次:

df = data_frame(entry = c(2, 5, 6, 7, 7, 8, 9), element = c(11, 11, 11, 6, 
36, 16, 16))

例如,这里的条目 7 出现了两次,因为列表中有两个元素(6 和 36)。

我怎样才能做到这一点?

【问题讨论】:

    标签: r list dataframe


    【解决方案1】:

    “低级”解决方案:

    data.frame(entry=rep(seq_along(l1),lengths(l1)),element=unlist(l1))
    #  entry element
    #1     2      11
    #2     5      11
    #3     6      11
    #4     7       6
    #5     7      36
    #6     8      16
    #7     9      16
    

    【讨论】:

      【解决方案2】:

      我们可以有两种选择。将list 命名为一个,将enframe 命名为tbl_df,然后将unnest 命名为list 元素。 NULL 元素将被自动删除

      library(tidyverse)
      l1 %>% 
           set_names(seq_along(.)) %>% 
           enframe %>%
           unnest
      

      或者在将liststack 命名为 2 列 data.frame 之后

      stack(setNames(l1, seq_along(l1)))[2:1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-17
        • 2020-02-10
        • 2020-07-28
        • 2013-01-16
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        相关资源
        最近更新 更多