这可能很容易实现,但令我难过。
我有一个数据框:
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列?我迷路了?
谢谢。
答案 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