如何根据R中原始数据的索引对数据帧列进行排序?

时间:2014-03-06 22:13:31

标签: r dataframe

这可能很容易实现,但令我难过。

我有一个数据框:

    chip1 chip2
P1  1.57  2.13
P2  2.04  1.92
P3  1.90  2.11
P4  1.48  2.24

分位数归一化的下一步是对每列进行排序,然后生成行方式,如下所示:

   chip1 chip2     M
P1  1.48  1.92 1.700
P2  1.57  2.11 1.840
P3  1.90  2.13 2.015
P4  2.04  2.24 2.140

然后最终的标准化数据是:

       chip1  chip2
   P1  1.840  2.015
   P2  2.140  1.700
   P3  2.015  1.840
   P4  1.700  2.140

使用先前数据帧的M列生成归一化数据,该M列基于来自第一数据帧的chip1和chip2重新排序。如何使用原始列中的索引订购M列?我迷路了?

谢谢。

2 个答案:

答案 0 :(得分:2)

nrm <- rowMeans(sapply(df, sort))
sapply(df, function(x) nrm[rank(x)])

产生

     chip1 chip2
[1,] 1.840 2.015
[2,] 2.140 1.700
[3,] 2.015 1.840
[4,] 1.700 2.140

答案 1 :(得分:1)

根据你提到的内容,我希望这就是你的意思。

> X = cbind(rnorm(5, 1), rnorm(5,0))
> X
          [,1]         [,2]
[1,] 2.2629543 -1.539950042
[2,] 0.6737666 -0.928567035
[3,] 2.3297993 -0.294720447
[4,] 2.2724293 -0.005767173
[5,] 1.4146414  2.404653389
> Y = apply(X,2,sort)
> cbind(Y, rowSums(Y))
          [,1]         [,2]       [,3]
[1,] 0.6737666 -1.539950042 -0.8661834
[2,] 1.4146414 -0.928567035  0.4860744
[3,] 2.2629543 -0.294720447  1.9682338
[4,] 2.2724293 -0.005767173  2.2666621
[5,] 2.3297993  2.404653389  4.7344527
> X[order(rowSums(Y)),]
          [,1]         [,2]
[1,] 2.2629543 -1.539950042
[2,] 0.6737666 -0.928567035
[3,] 2.3297993 -0.294720447
[4,] 2.2724293 -0.005767173
[5,] 1.4146414  2.404653389