【问题标题】:R - how to get vector of strings frequency if i have strings in matrix and their factor levelsR - 如果我在矩阵中有字符串及其因子级别,如何获取字符串频率的向量
【发布时间】:2014-07-28 10:01:16
【问题描述】:

我有很多字符串(DNA 读取的几个 k-mers)。它存储在 R 语言矩阵(或数组?)中,f.e.:

allKmers <- character()
allKmers <- c(allKmers,c("ACG", "CGT", "GTA", "TAC")) # V1
allKmers <- c(allKmers,c("GTA", "TAC", "ACG", "CGC")) # V2
allKmers <- c(allKmers,c("TAA", "AAT", "ATA", "TAA")) # V3
arrayKmers <- array(allKmers, dim = c(4,3), dimnames = NULL) # this is it!

然后我可以从因子中获得所有独特的水平:

levels(as.factor(arrayKmers))
[1] "AAT" "ACG" "ATA" "CGC" "CGT" "GTA" "TAA" "TAC"

你看到了吗? 8 级。

然后我想得到 3 个具有 8 个值的向量,对应于在 V1、V2 和 V3 中满足此级别的频率,例如:

< 0, 1, 0, 0, 1, 1, 0, 1 > # V1 
< 0, 1, 0, 1, 0, 1, 0, 1 > # V2 
< 2, 0, 1, 0, 0, 0, 1, 0 > # V3 

有没有什么简单的方法可以得到这个向量?可能是一些不错的功能?我可以手动编码,但您可能知道一些更好的工具吗?然后我会计算 dist 矩阵,做聚类,blablabla。

【问题讨论】:

    标签: r vector matrix cluster-analysis frequency


    【解决方案1】:

    您可以将 V1、V2 等与独特的关卡进行匹配,然后将结果制成表格。

    uKmers <- levels(as.factor(arrayKmers))
    freqKmers <- apply(arrayKmers, 2, function(x){
      tabulate(match(x, uKmers), length(uKmers))
    }
    )
    
    > t(freqKmers)
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
    [1,]    0    1    0    0    1    1    0    1
    [2,]    0    1    0    1    0    1    0    1
    [3,]    1    0    1    0    0    0    2    0
    

    【讨论】:

      【解决方案2】:

      这是一种方法:

      library(qdapTools)
      mtabulate(split(t(data.frame(arrayKmers)), 1:3))
      
      ##   AAT ACG ATA CGC CGT GTA TAA TAC
      ## 1   0   1   0   0   1   1   0   1
      ## 2   0   1   0   1   0   1   0   1
      ## 3   1   0   1   0   0   0   2   0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-18
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多