【问题标题】:Get the column of a list of lists in R获取R中列表列表的列
【发布时间】:2021-12-31 14:38:18
【问题描述】:

使用 R,我的数据集 L 是一个列表列表。我的print(L) 产生以下输出:

[[1]]
[[1]][[1]]
[1] 0.8198689

[[1]][[2]]
[1] 0.8166747


[[2]]
[[2]][[1]]
[1] 0.5798426

[[2]][[2]]
[1] 0.5753511


[[3]]
[[3]][[1]]
[1] 0.4713508

[[3]][[2]]
[1] 0.4698621

我想得到第二列的向量。但是unlist(L[[2]]) 给了我第二行(不是第二列),L[,2] 给了我错误Error in L[, 2] : incorrect number of dimensions。我也试过L$'2'但没用。

如何在R中获取该数据集第二列的向量?

【问题讨论】:

    标签: r list dataframe vector


    【解决方案1】:

    1) 假设输入在最后使用 sapply 的注释中可重现地显示(如果您希望将其作为列表,则使用 lapply)。不使用任何包。

    sapply(L, `[[`, 2)
    ## [1] 0.8166747 0.5753511 0.4698621
    

    2) 使用 purrr 我们有:

    library(purrr)
    
    transpose(L)[[2]]
    ## [[1]]
    ## [1] 0.8166747
    ##  
    ## [[2]]
    ## [1] 0.5753511
    ##
    ## [[3]]
    ## [1] 0.4698621
    

    3)如果我们知道 L 是规则形状的,我们可以将其转换为矩阵,然后取第二列。

    matrix(unlist(L), length(L), byrow = TRUE)[, 2]
    ## [1] 0.8166747 0.5753511 0.4698621
    

    或作为列表

    do.call("rbind", L)[, 2]
    

    4)这里的第二列是每个“行”中的最后一项,如果这是您想要的,因为即使列表不完整也可以使用,然后试试这个

    mapply('[[', L, lengths(L))
    ## [1] 0.8166747 0.5753511 0.4698621
    

    或作为列表

    Map('[[', L, lengths(L))
    

    注意

    # input in reproducible form
    L <- list(
      list(0.8198689, 0.8166747),
      list(0.5798426, 0.5753511),
      list(0.4713508, 0.4698621))
    

    【讨论】:

      【解决方案2】:

      使用purrr 执行此操作的简单方法是使用map(),它返回一个列表。

      library(purrr)
      
      map(L, 2)
      

      如果你想要一个(数字)向量,请使用map_dbl()

      map_dbl(L, 2)
      # [1] 0.8166747 0.5753511 0.4698621
      

      【讨论】:

        猜你喜欢
        • 2019-02-13
        • 2015-04-03
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 2016-12-25
        • 2021-05-14
        相关资源
        最近更新 更多