r之按列名排序数据框

虾米哥 阅读:47 2024-07-26 13:47:55 评论:0

我有一个这样的数据框:

           G2_ref G10_ref G12_ref G2_alt G10_alt G12_alt 
20011953      3      6      0      5       1     5     
12677336      0      0      0      1       3     6   
20076754      0      3      0     12      16     8  
2089670       0      4      0      1      11     9 
9456633       0      2      0      3      10     0  
468487        0      0      0      0       0     0 

我正在尝试对列进行排序以最终获得此列顺序:

G2_ref G2_alt G10_ref G10_alt G12_ref G12_alt 

我试过了:df[,order(colnames(df))]

但我有这个订单:

G10_alt G10_ref G12_alt G12_ref G2_alt G2_ref 

如果有人有任何想法,那就太好了。

请您参考如下方法:

一种选择是提取数字部分以及末尾的子字符串,然后执行 order

df[order(as.numeric(gsub("\\D+", "", names(df))),  
            factor(sub(".*_", "", names(df)), levels = c('ref', 'alt')))] 
#          G2_ref G2_alt G10_ref G10_alt G12_ref G12_alt 
#20011953      3      5       6       1       0       5 
#12677336      0      1       0       3       0       6 
#20076754      0     12       3      16       0       8 
#2089670       0      1       4      11       0       9 
#9456633       0      3       2      10       0       0 
#468487        0      0       0       0       0       0 

数据

df <- structure(list(G2_ref = c(3L, 0L, 0L, 0L, 0L, 0L), G10_ref = c(6L,  
0L, 3L, 4L, 2L, 0L), G12_ref = c(0L, 0L, 0L, 0L, 0L, 0L), G2_alt = c(5L,  
1L, 12L, 1L, 3L, 0L), G10_alt = c(1L, 3L, 16L, 11L, 10L, 0L),  
    G12_alt = c(5L, 6L, 8L, 9L, 0L, 0L)), .Names = c("G2_ref",  
"G10_ref", "G12_ref", "G2_alt", "G10_alt", "G12_alt"),  
   class = "data.frame", row.names = c("20011953",  
"12677336", "20076754", "2089670", "9456633", "468487")) 


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号