【问题标题】:Reordering matrix columns based on specific prefix in few column names in R基于R中少数列名中的特定前缀重新排序矩阵列
【发布时间】:2015-04-13 08:49:10
【问题描述】:

我在 R 中有一个带有列名的 matrix

> colnames(m)
 [1] "caz_RNAi1_R1"     "caz_RNAi2_R1"     "cg1316_RNAi1_R1"  "cg1316_RNAi2_R1"  "cg4612_RNAi1_R1" 
 [6] "cg4612_RNAi2_R1"  "Dp1_RNAi1_R1"     "Dp1_RNAi2_R1"     "fmr1_RNAi1_R1"    "fmr1_RNAi2_R1"   
[11] "GFP_RNAi1_R1"     "GFP_RNAi2_R1"     "GFP_RNAi3_R1"     "GFP_RNAi4_R1"     "GFP_RNAi5_R1"    
[16] "GFP_RNAi6_R1"     "hrb87f_RNAi1_R1"  "hrb87f_RNAi2_R1"  "hrb98de_RNAi1_R1" "hrb98de_RNAi2_R1"

现在,一些列名具有前缀GFP。我想重新排序矩阵列,以便名称中具有此前缀的列将是开始列,其余列将按字母顺序排列。

所以colnames(m) 应该像这样订购:

"GFP_a", "GFP_b", "GFP_c",..."GFP_z", "a", "b","c","d", ....

这样做的方法是什么?

【问题讨论】:

  • 您想要一个混合顺序,同时对字符和数字进行排序?

标签: r matrix alphabetical


【解决方案1】:

你可以的

 m[order(-(grepl('^GFP', m))+1L)]

m 来自@Mamoun Benghezal 的帖子。在示例中,它已经按字母顺序排列,但万一不是

 set.seed(24)
 m1 <-sample(m)
 m1[order(m1)][order(-(grepl('^GFP',m1[order(m1)]))+1L)]

【讨论】:

    【解决方案2】:

    你可以试试这个

    m <-  c("caz_RNAi1_R1", "caz_RNAi2_R1", "cg1316_RNAi1_R1", "cg1316_RNAi2_R1", "cg4612_RNAi1_R1",
            "cg4612_RNAi2_R1", "Dp1_RNAi1_R1", "Dp1_RNAi2_R1", "fmr1_RNAi1_R1", "fmr1_RNAi2_R1",
            "GFP_RNAi1_R1", "GFP_RNAi2_R1", "GFP_RNAi3_R1", "GFP_RNAi4_R1", "GFP_RNAi5_R1",
            "GFP_RNAi6_R1", "hrb87f_RNAi1_R1",  "hrb87f_RNAi2_R1",  "hrb98de_RNAi1_R1", "hrb98de_RNAi2_R1")
    sort(m[grep(pattern="^GFP", x = m )]) # beginning with GFP
    ## [1] "GFP_RNAi1_R1" "GFP_RNAi2_R1" "GFP_RNAi3_R1" "GFP_RNAi4_R1" "GFP_RNAi5_R1" "GFP_RNAi6_R1"
    sort(m[-grep(pattern="^GFP", x = m )]) # do not begin by GFP
    ##     [1] "caz_RNAi1_R1"     "caz_RNAi2_R1"     "cg1316_RNAi1_R1"  "cg1316_RNAi2_R1"  "cg4612_RNAi1_R1"  "cg4612_RNAi2_R1"  "Dp1_RNAi1_R1"     "Dp1_RNAi2_R1"     "fmr1_RNAi1_R1"    "fmr1_RNAi2_R1"   
    ##    [11] "hrb87f_RNAi1_R1"  "hrb87f_RNAi2_R1"  "hrb98de_RNAi1_R1" "hrb98de_RNAi2_R1"
    c(sort(m[grep(pattern="^GFP", x = m )]),  sort(m[-grep(pattern="^GFP", x = m )])) # ordered columns
    

    【讨论】:

    • 这里没有排序元素。
    • 即使在本例中没有必要,sort 也会对列进行排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多