【问题标题】:store list values in data.frame with unequal rows将列表值存储在具有不相等行的 data.frame 中
【发布时间】:2018-07-21 19:20:17
【问题描述】:

我正在尝试通过从列表中提取值来创建数据框。我有一个 157 列表,其中包含不相等的值,如图所示

我想要的是在一个数据帧中 rbind 的所有列表值。我尝试通过 for 循环执行此操作,但它只存储了第一个列表值。
我能做的是:

   porturn1=data.table::rbindlist(lapply(porturn[1], as.data.frame), idcol = "id")
   porturn2=data.table::rbindlist(lapply(porturn[2], as.data.frame), idcol = "id")
   porturn3=data.table::rbindlist(lapply(porturn[3], as.data.frame), idcol = "id")
   porturn4=data.table::rbindlist(lapply(porturn[4], as.data.frame), idcol = "id")
   porturn5=data.table::rbindlist(lapply(porturn[5], as.data.frame), idcol = "id")

然后将rbind.fill 命令应用于所有这些数据,但这似乎很麻烦且不切实际。虽然rbind.fill之后的结果是我想要的,如图:

如何创建循环来创建所需的数据框(如上图所示,我需要存储 157 个列表值或 157 行)?

【问题讨论】:

    标签: r list loops dataframe


    【解决方案1】:

    您可以将do.callrbind.fill 一起运行,这会将rbind.fill 应用于list 的各个条目并将结果组合成data.frame

    library(plyr)
    
    ## make test data
    set.seed(0)
    porturn <- sapply(sample(1:20, 10), function(x) 1:x)
    str(porturn)
    #> List of 10
    #>  $ : int [1:18] 1 2 3 4 5 6 7 8 9 10 ...
    #>  $ : int [1:6] 1 2 3 4 5 6
    #>  $ : int [1:7] 1 2 3 4 5 6 7
    #>  $ : int [1:10] 1 2 3 4 5 6 7 8 9 10
    #>  $ : int [1:15] 1 2 3 4 5 6 7 8 9 10 ...
    #>  $ : int [1:4] 1 2 3 4
    #>  $ : int [1:13] 1 2 3 4 5 6 7 8 9 10 ...
    #>  $ : int [1:14] 1 2 3 4 5 6 7 8 9 10 ...
    #>  $ : int [1:8] 1 2 3 4 5 6 7 8
    #>  $ : int [1:20] 1 2 3 4 5 6 7 8 9 10 ...
    
    ## work
    porturnall = do.call(rbind.fill,lapply(porturn, function(x) as.data.frame(t(x))))
    print(porturnall)
    #>    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
    #> 1   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  NA  NA
    #> 2   1  2  3  4  5  6 NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    #> 3   1  2  3  4  5  6  7 NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    #> 4   1  2  3  4  5  6  7  8  9  10  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    #> 5   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  NA  NA  NA  NA  NA
    #> 6   1  2  3  4 NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    #> 7   1  2  3  4  5  6  7  8  9  10  11  12  13  NA  NA  NA  NA  NA  NA  NA
    #> 8   1  2  3  4  5  6  7  8  9  10  11  12  13  14  NA  NA  NA  NA  NA  NA
    #> 9   1  2  3  4  5  6  7  8 NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    #> 10  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20
    
    ## Created on 2018-07-21 by the reprex package (v0.2.0).
    

    【讨论】:

    • 它按照我想要的数据框工作,非常感谢。
    猜你喜欢
    • 2019-06-19
    • 2023-01-19
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多