【问题标题】:R: how to convert a matrix with each row as equal-length character string into a matrix of multiple columns?R:如何将每行为等长字符串的矩阵转换为多列矩阵?
【发布时间】:2013-08-14 22:03:43
【问题描述】:

我有一个一列多行的矩阵,每一行都是等长的字符串,如下代码所示:

a = list("GTCA", "GACA")
library(plyr)
df <- ldply(a)

我想把它转换成一个多列的矩阵,列数等于字符串长度。通过执行以下代码,想要的结果应该是这样的:

a = list(c("G","T","C","A"), c("G","A","C","A"))
library(plyr)
df <- ldply(a)

我如何在 R 中做到这一点?谢谢!

【问题讨论】:

  • “列表”一词与“矩阵”截然不同

标签: string r split character


【解决方案1】:
do.call(rbind, sapply(a, strsplit, "") )
#-------
     [,1] [,2] [,3] [,4]
[1,] "G"  "T"  "C"  "A" 
[2,] "G"  "A"  "C"  "A" 

你确实说过你想要一个矩阵,对吧?如果你想用plyr-functions 来做这件事,那么这会成功:

 da <- laply(a, strsplit, split="")
 da
#---------    
     1   2   3   4  
[1,] "G" "T" "C" "A"
[2,] "G" "A" "C" "A"

如果您想要一个数据框,请使用具有相同参数的ldply

【讨论】:

    【解决方案2】:

    使用ldply 表单plyr:

    library(plyr)
    ldply(strsplit(df$V1,""))
     V1 V2 V3 V4
    1  G  T  C  A
    2  G  A  C  A
    

    【讨论】:

    • +1,使用fixed=TRUE 会加快速度(在更大的数据上)。
    【解决方案3】:

    这是来自qdap package 的答案,但如果您还没有使用 qdap,那么基本解决方案将是最佳的。

    library(qdap)
    colSplit(unlist(a), "")
    
    ##   X1 X2 X3 X4
    ## 1  G  T  C  A
    ## 2  G  A  C  A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2018-03-01
      • 2019-08-16
      相关资源
      最近更新 更多