简体   繁体   中英

sort data from one matrix by another matrix in R

I am in kind of a pickle. I have multiple matrices and want to sort the first column of a matrix by the last column of the previous matrix. Any ideas? I have tried apply, order, sort, etc.

  ########################################################
  ######################CODE#########################
  ### makes indiviual matrix of data ##
  ## this area would be replaced by read.files
  one<-matrix(c(2001,2002,2003,2004,23456, 23567,54321,12345),4,2);
  two<-matrix(c(54321,23567,23456,12345,1234,2345,3456,7777),4,2);
  three<-matrix(c(3456,7777,2345,1234,5677,6789,6678,6767),4,2);
  four<-matrix(c(6678,5677,6767,6789,5555,1111,1112,1113),4,2);
  five<-matrix(c(5555,1113,1112,1111,2222,1212,9999,8888),4,2);

  #######order all data######################
  onea<-one[order(one[,2]),];
  twoa<-two[order(two[,1]),];
  threea<-three[order(twoa[,2]),]; ####CANT GET THIS PART TO WORK!!!!!

What I want to do is sort three by twoa[,2]

  ####output looking for: 
 cbind(onea,twoa,threea)
 [,1]  [,2]  [,3] [,4] [,5] [,6]
 [1,] 2004 12345 12345 7777 7777 6789
 [2,] 2001 23456 23456 3456 3456 5677
 [3,] 2002 23567 23567 2345 2345 6678
 [4,] 2003 54321 54321 1234 1234 6767

It's unclear exactly what you're after, but if you are looking for the last column of each matrix to "match up" with the first column of the next, you can combine order and rank like this:

onea<-one[order(one[,2]),];
twoa<-two[order(two[,1])[rank(onea[,2])],];
threea<-three[order(three[,1])[rank(twoa[,2])],]
foura<-four[order(four[,1])[rank(threea[,2])],]
fivea<-five[order(five[,1])[rank(foura[,2])],]
cbind(onea,twoa,threea,foura,fivea)
##      [,1]  [,2]  [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 2004 12345 12345 7777 7777 6789 6789 1113 1113  1212
## [2,] 2001 23456 23456 3456 3456 5677 5677 1111 1111  8888
## [3,] 2002 23567 23567 2345 2345 6678 6678 5555 5555  2222
## [4,] 2003 54321 54321 1234 1234 6767 6767 1112 1112  9999

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM