【问题标题】:Transform List of List of Vectors into Dataframe in R将向量列表列表转换为 R 中的数据框
【发布时间】:2021-01-18 03:27:10
【问题描述】:

这是关于在 R 中转换列表。

我的数据如下:

>data = list(list(c('a', 'b'), c('c', 'd')), list(c('a', 'b', 'c'), c('d', 'e', 'f'), c('g', 'h', 'i')))
>data
[[1]]
[[1]][[1]]
[1] "a" "b"

[[1]][[2]]
[1] "c" "d"


[[2]]
[[2]][[1]]
[1] "a" "b" "c"

[[2]][[2]]
[1] "d" "e" "f"

[[2]][[3]]
[1] "g" "h" "i"

我想连接子列表的每个向量,例如paste("a", "b") = "a b"),这样整个列表就可以转换成一个数据框,如下所示:

> df <- data.frame(col1 = c("a b", "c d", NA), col2 = c("a b c", "d e f", "g h i"))
> df
  col1  col2
1  a b a b c
2  d e d e f
3 <NA> g h i

我现在尝试使用 R 中的 apply-functions 解决这个问题,但这真的不是我的领域...提前感谢您的帮助!

【问题讨论】:

    标签: r list dataframe concatenation


    【解决方案1】:

    这里有一些东西。我们使用了来自data.tabletranspose()setDF()的两个辅助函数。

    library(data.table)
    nrs <- max(lengths(data))
    
    df <- setDF(
      lapply(lapply(data, transpose), function(x) do.call(paste, x)[1:nrs])
    )
    df
    #     V1    V2
    # 1  a b a b c
    # 2  c d d e f
    # 3 <NA> g h i
    

    编辑:

    无依赖解决方案:

    as.data.frame(sapply(data, function(x) sapply(x, paste, collapse = " ")[1:nrs]))
    

    【讨论】:

    • 不知何故,nrs &lt;- max(unlist(sapply(data, lengths))) 行没有找到最长的子列表,而是最短的。除此之外,这两种解决方案都可以完美运行。谢谢
    • @hyhno01 nrs 的问题应该得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多