【问题标题】:R dealing with NULL values while converting list to matrixR在将列表转换为矩阵时处理NULL值
【发布时间】:2014-11-20 19:31:15
【问题描述】:

假设我有如下结构:

data = structure(list(person = structure(list(name = "A, B", 
        gender = "F", dead = NULL), .Names = c("name", 
        "gender", "dead")), person = structure(list(name = "C", 
        gender = "M", dead = "RIP"), .Names = c("name", 
        "gender", "dead"))), .Names = c("person", "person"))

我想把它转换成矩阵

data = matrix(unlist(data), nrow = length(data), ncol=length(data[[1]]), byrow = TRUE)

如何避免在使用matrix 时或什至在此之前仅使用base 函数而不使用plyrrbind.fill 时回收元素? 结果是:

> data
     [,1]   [,2]  [,3]  
[1,] "A, B" "F"   "C"   
[2,] "M"    "RIP" "A, B"

我想得到NA"",其中值为NULL。例如:

> data
     [,1]   [,2]  [,3]  
[1,] "A, B" "F"   ""   
[2,] "C"    "M"   "RIP" 

任何帮助将不胜感激。

【问题讨论】:

    标签: r list matrix data-conversion


    【解决方案1】:

    您可以尝试stringi 包中的新stri_list2matrix 函数。

    library(stringi)
    stri_list2matrix(lapply(data, unlist), byrow=TRUE, fill="")
    #      [,1]   [,2] [,3] 
    # [1,] "A, B" "F"  ""   
    # [2,] "C"    "M"  "RIP"
    

    或者对于NA 而不是"",省略fill 参数

    stri_list2matrix(lapply(data, unlist), byrow=TRUE)
    #      [,1]   [,2] [,3] 
    # [1,] "A, B" "F"  NA   
    # [2,] "C"    "M"  "RIP"
    

    或者,如果您更喜欢基本的 R 答案,为避免出现问题,您可以首先使用 length<- 使所有向量的长度相同。这会将NA 附加到所有较短的向量,并使它们与最长向量的长度相同。

    len <- max(sapply(data, length)) ## get length of longest vector
    t(sapply(unname(data), function(x) `length<-`(unname(unlist(x)), len)))
    #      [,1]   [,2] [,3] 
    # [1,] "A, B" "F"  NA   
    # [2,] "C"    "M"  "RIP"
    

    【讨论】:

    • 感谢您的回答。是的,这成功了。我使用了base 版本。做得很好:] 现在我看到了你的编辑,你更简化了它。干杯!
    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2015-04-27
    • 2017-12-22
    • 2018-11-17
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多