根据 R 中少数列名中的特定前缀对矩阵列重新排序
Reordering matrix columns based on specific prefix in few column names in R
我在 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", ....
有什么方法可以做到这一点?
你可以试试这个
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[order(-(grepl('^GFP', m))+1L)]
其中 m
来自@Mamoun Benghezal 的 post。在示例中,它已经按字母顺序排列,但如果不是
set.seed(24)
m1 <-sample(m)
m1[order(m1)][order(-(grepl('^GFP',m1[order(m1)]))+1L)]
我在 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", ....
有什么方法可以做到这一点?
你可以试试这个
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[order(-(grepl('^GFP', m))+1L)]
其中 m
来自@Mamoun Benghezal 的 post。在示例中,它已经按字母顺序排列,但如果不是
set.seed(24)
m1 <-sample(m)
m1[order(m1)][order(-(grepl('^GFP',m1[order(m1)]))+1L)]