【问题标题】:From list of characters to matrix/data-frame of numeric (R)从字符列表到数字(R)的矩阵/数据框
【发布时间】:2015-07-20 05:42:11
【问题描述】:

我有一个很长的列表,其元素是长度为 1 的列表,其中包含一个字符向量。这些向量可以有不同的长度。

向量的元素是“字符”,但我想将它们转换为数字,因为它们实际上代表数字。

我想创建一个矩阵或数据框,其行是上面的向量,转换为数字。由于它们的长度不同,因此每行的“右端”可以用 NA 填充。

我正在尝试使用库 {plyr} 中的函数 rbind.fill.matrix,但我唯一能得到的是一个长数字一维数组,其中包含所有数字,而不是矩阵。

这是我能做的最好的获取数字列表(这里是我的原始列表):

dat<-sapply(sapply(dat,unlist),as.numeric)

我现在如何创建矩阵? 谢谢!

【问题讨论】:

    标签: r list matrix rbind


    【解决方案1】:

    我会这样做:

    library(stringi)
    temp <- stri_list2matrix(dat, byrow = TRUE)
    final <- `dim<-`(as.numeric(temp), dim(temp))
    

    基本思想是stri_list2matrixlist 转换为matrix,但它仍然是一个字符矩阵。 as.numeric 将删除矩阵的维度属性,因此我们将它们添加回来:

    `dim<-` ## Yes, the backticks are required -- or at least quotes
    

    POC:

    dat <- list(1:2, 1:3, 1:2, 1:5, 1:6)
    dat <- lapply(dat, as.character)
    
    dat
    # [[1]]
    # [1] "1" "2"
    # 
    # [[2]]
    # [1] "1" "2" "3"
    # 
    # [[3]]
    # [1] "1" "2"
    # 
    # [[4]]
    # [1] "1" "2" "3" "4" "5"
    # 
    # [[5]]
    # [1] "1" "2" "3" "4" "5" "6"
    
    library(stringi)
    temp <- stri_list2matrix(dat, byrow = TRUE)
    final <- `dim<-`(as.numeric(temp), dim(temp))
    final
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,]    1    2   NA   NA   NA   NA
    # [2,]    1    2    3   NA   NA   NA
    # [3,]    1    2   NA   NA   NA   NA
    # [4,]    1    2    3    4    5   NA
    # [5,]    1    2    3    4    5    6
    

    【讨论】:

    • 非常感谢:它有效!你能解释一下你用来创建“final”的最后一个命令吗?
    • @fatoddsun,我已经添加了一些解释。
    猜你喜欢
    • 2016-11-29
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多