Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据R中少数列名中的特定前缀对矩阵列重新排序_R_Matrix_Alphabetical - Fatal编程技术网

根据R中少数列名中的特定前缀对矩阵列重新排序

根据R中少数列名中的特定前缀对矩阵列重新排序,r,matrix,alphabetical,R,Matrix,Alphabetical,我在R中有一个带有列名的矩阵 > 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

我在R中有一个带有列名的
矩阵

> 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", ....
怎么做?你可以试试这个

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
m你能做什么

 m[order(-(grepl('^GFP', m))+1L)]
其中
m
来自@Mamoun Benghzeal的帖子。在本例中,它已按字母顺序排列,但如果不是,则按字母顺序排列

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

m1此处没有排序元素。即使在本例中不需要排序元素,
sort
也会对列进行排序。是否希望在此处使用混合顺序对字符和数字进行排序?