排序文件与另一个文件具有相同的列顺序

时间:2015-07-06 19:49:11

标签: r

我有两个共享相同列名的文件sdf.iso。我想对s文件进行排序,以使列与df.iso文件的顺序相同。下面显示的两个文件的一部分(列数比显示的多得多)

> head(s)
         100G    100R   106G    106R    122G    122R   124G    124R    126G   126R
Cal01   64982   40617  16687   34169   60261   62723  20196   55175   46234  11648
Cal02   23241   19762   8237   27298   22358   24350  14503   23792   20989   6514
Cal03  377255  317826 101387  254313  330619  394603 168218  311727  275783  99379
Cal04   35172   30102  10305   39377   33148   34551  15897   34986   24039   7224
Cal05     208     271    104     150     287     185    154     347     180     33
Cal06 1588672 1386207 443956 1119972 1533890 1784794 571805 1368031 1257916 451750

> head(df.iso)
                                     185R 68G 60G 134G 124R 279R 126G 26R 73G 192G 100R
hsa-let-7a-3p_ATACAATCTACTGTCTTTCCT     1   6   1    2    2    1    2   2   1    1    1
hsa-let-7a-3p_ATATACAATCTACTGTCTTT      1   0   1    1    4    0    0   1   1    0    2
hsa-let-7a-3p_ATATACAATCTACTGTCTTTC     4   5   2   12    4    1    2   3   4    2    4
hsa-let-7a-3p_ATATACAATCTACTGTCTTTCC    7   5   2    6    3    2    2   2   1    1    2
hsa-let-7a-3p_ATATACAATCTACTGTCTTTCT   15   6  14   49   32    7   20  20   8   13   22
hsa-let-7a-3p_CCATACAATCTACTGTCTTTCT    4   1   1    0    0    1    1   0   3    2    1

2 个答案:

答案 0 :(得分:5)

如果两个data.frames(不是文件)具有相同的列,则可以

xy1 <- data.frame(a = 1:3, b = runif(3), c = rnorm(3))
xy2 <- data.frame(c = rnorm(3), a = 1:3, b = runif(3))

xy2

           c a         b
1 -0.7573781 1 0.9564583
2  0.3513074 2 0.9837766
3  1.6455091 3 0.9433857

xy2[, names(xy1)]

  a         b          c
1 1 0.9564583 -0.7573781
2 2 0.9837766  0.3513074
3 3 0.9433857  1.6455091

答案 1 :(得分:1)

我假设你从已经从文件中读入R的数据帧开始。如果它们的列名完全相同,一种简单的方法是按列名重新排序:

s = s[ , order(colnames(s))]
df.iso = df.iso[ , order(colnames(df.iso))]

然后您可以将这些文件写入文件。对列名进行排序可使数据框更易于比较,并且还具有使数据框或文件中的任何给定列名更容易找到的附加好处。