R:按rownames排序

时间:2013-10-10 10:06:01

标签: r sorting

我希望以一种相当不寻常的方式对数据进行排序,似乎无法管理它 我的rownames如下:
CLSTRU
TBSVOD
TRUCLS
VODTBS

如您所见,前三个字符已用最后3个字符切换。我想按以下方式对其进行排序:
CLSTRU
TRUCLS
TBSVOD
VODTBS

有人有任何建议吗?

谢谢!

麦克

3 个答案:

答案 0 :(得分:3)

也许(猜测你想要两个三胞胎的“最小”值作为排序标准):

 dfrm[ order( pmin(substr( rownames(dfrm), 1,3),substr( rownames(dfrm), 4,6) ) ),
        , ]

测试:

dat <- c('CLSTRU',
 'TBSVOD',
 'TRUCLS',
 'VODTBS')

 dat[ order( pmin(substr( dat, 1,3),substr( dat, 4,6) ) )]
#[1] "CLSTRU" "TRUCLS" "TBSVOD" "VODTBS"

答案 1 :(得分:-3)

我对r一无所知,但我想知道你是否可以:

  1. 将行复制到2个数组中的一个 - “array1”和“array2”。要将行复制到数组1,请将前3个字符与“array1”中已有的所有条目的最后3个字符进行比较。如果它们被发现(即,这个“当前”行是“返回前排”),则将该元素复制到数组2 - 这样,array1包含“普通方式”行,而array2包含“回到前面“行。

  2. 处理完所有行后(如果一切都有效,array1.length = array2.length =行数/ 2) - 创建最终数据数组,添加:array1.row1 array2.row1, array1.row2,array2.row2等

  3. ...

答案 2 :(得分:-4)

我认为简单的unix sort命令可以执行此操作,请检查以下命令:

$ sort demo

ABCDEF

DEFABC

HIJKLM

KLMHIJ

由于