如何根据R数据框中的另一组列对一组列进行排序

时间:2017-06-20 03:53:53

标签: r

我正在使用R
我的数据框(DT)中有两组列: R1,R2,...,R6和U1,U2,...... U6。 R1和U1是相关的,R2和U2是相关的,依此类推。
当我排序(R1,...,R6)时,我还需要(U1,...,U6)相同的订单值,即我有:

R1 R2 R3 R4 R5 R6 U1 U2 U3 U4 U5 U6
2 3 1 8 4 5 .1 .5 .9 .1 .2 .5
1 5 9 2 6 3 .1 .2 .3 .4 .5 .6
我想将其转换为:
R1 R2 R3 R4 R5 R6 U1 U2 U3 U4 U5 U6
8 5 4 3 2 1 .1 .5 .2 .5 .1 .9
9 6 5 3 2 1 .3 .5 .2 .6 .4 .1

这就是我正在做的事情,但由于DT拥有100,000条记录,因此需要很长时间。  第1:6列是R1:R6并且存储OU1中的U1到U6的排序值:OU6

# This piece of code sorts R1 through R6
DT=cbind(DT, t(apply(-DT[,1:6] 1, sort)))
  DT[,13:18]=-1*S_RU[,13:18]

#This piece of code sorts U1 through U6
for(i in 1:nrow(DT)){
    x=as.numeric(DT[i,c("U1","U2","U3","U4","U5","U6")] ) 
    S_RU[i,c("OU6","OU5","OU4","OU3","OU2","OU1")]=x[order(-S_RU[i,1:6])]
  }

1 个答案:

答案 0 :(得分:1)

怎么样:

#example data
DT <- as.data.frame(matrix(c(2,3,1,8,4,5,.1,.5,.9,.1,.2,.5,1,5,9,2,6,3,.1,.2,.3,.4,.5,.6), byrow = T, ncol = 12))
colnames(DT) <- c(paste0("R",1:6),paste0("U",1:6))
DT

# do as you like
mtx <- apply(DT, 1, function(x) {
  R <- order(x[1:6], decreasing = T)
  c(x[1:6][R], x[7:12][R])
  })

# returning the correct formatting and names in one go
setNames(as.data.frame(t(mtx)), colnames(DT))

#  R1 R2 R3 R4 R5 R6  U1  U2  U3  U4  U5  U6
#1  8  5  4  3  2  1 0.1 0.5 0.2 0.5 0.1 0.9
#2  9  6  5  3  2  1 0.3 0.5 0.2 0.6 0.4 0.1