【问题标题】:Unlist and create number for each list element and each value取消列出并为每个列表元素和每个值创建编号
【发布时间】:2021-06-03 02:12:01
【问题描述】:

我有一个这样的列表:

mylist <- list(c("A", "B", "C"), c("D", "E"), "F")
mylist

[[1]]
[1] "A" "B" "C"

[[2]]
[1] "D" "E"

[[3]]
[1] "F"

我希望将列表转换为如下所示的数据框。我知道如何使用unlist 创建值向量。但我还想要一列,每个列表元素(“列表”)都有一个数字,每个列表元素(“id”)中的每个值都有一个数字:

Desc List id
A 1 1
B 1 2
C 1 3
D 2 1
E 2 2
F 3 1

【问题讨论】:

    标签: r list


    【解决方案1】:

    这是使用stack + ave 的基本 R 选项

    type.convert(
      transform(
        setNames(
          stack(setNames(mylist, seq_along(mylist))),
          c("Desc", "List")
        ),
        id = ave(seq_along(unlist(mylist)), List, FUN = seq_along)
      ),
      as.is = TRUE
    )
    

    给了

      Desc List id
    1    A    1  1
    2    B    1  2
    3    C    1  3
    4    D    2  1
    5    E    2  2
    6    F    3  1
    

    数据

    mylist <- list(c("A", "B", "C"), c("D", "E"), "F")
    

    【讨论】:

      【解决方案2】:

      reshape2::melt 有一个列表方法。然后在每个列表元素的lengths 上使用sequence 添加“id”:

      transform(reshape2::melt(mylist), id = sequence(lengths(mylist)))
        value L1 id
      1     A  1  1
      2     B  1  2
      3     C  1  3
      4     D  2  1
      5     E  2  2
      6     F  3  1
      

      或者在base:

      len = lengths(mylist)
      data.frame(x = unlist(mylist), List = rep(seq_along(len), len), id = sequence(len))
        x List id
      1 A    1  1
      2 B    1  2
      3 C    1  3
      4 D    2  1
      5 E    2  2
      6 F    3  1
      

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 2023-02-05
        • 2011-10-08
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多