[R] how to join two arrays using their column names intersection

jim holtman jholtman at gmail.com
Tue Jan 30 13:30:46 CET 2007


> ar1 <- array(data=c(1:16),dim=c(4,4))
> ar2 <- array(data=c(1:16),dim=c(4,4))
> colnames(ar1)<-c("A","B","D","E")
> colnames(ar2)<-c("C","A","E","B")
>
> ar1
     A B  D  E
[1,] 1 5  9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> ar2
     C A  E  B
[1,] 1 5  9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> # get the common names between the matrices
> same <- intersect(colnames(ar1), colnames(ar2))
> same
[1] "A" "B" "E"
> # join them together
> rbind(ar1[,same], ar2[,same])
     A  B  E
[1,] 1  5 13
[2,] 2  6 14
[3,] 3  7 15
[4,] 4  8 16
[5,] 5 13  9
[6,] 6 14 10
[7,] 7 15 11
[8,] 8 16 12
>


On 1/30/07, Federico Abascal <fabascal at cnb.uam.es> wrote:
> I have found something that partially works. Just to illustrate what am
> I looking for:
>
> for(a in colnames(ar1)) {if(a %in% colnames(ar2)) { cat(a, "\t",
> ar1[,a],"\t",ar2[,a],"\n")}}
> A        1 2 3 4         5 6 7 8
> B        5 6 7 8         13 14 15 16
> E        13 14 15 16     9 10 11 12
>
> I think I can use something similar to obtain the desired results, but I
> am curious to know if there is a better way to do it.
> Federico
>
>
> Federico Abascal wrote:
> > Dear all,
> >
> > I have a problem that may be someone of you can help. I am a newbie and
> > do not find how to do it in manuals.
> >
> > I have two arrays, for example:
> >
> > ar1 <- array(data=c(1:16),dim=c(4,4))
> > ar2 <- array(data=c(1:16),dim=c(4,4))
> > colnames(ar1)<-c("A","B","D","E")
> > colnames(ar2)<-c("C","A","E","B")
> >
> >
> >> ar1
> >>
> >      A B  D  E
> > [1,] 1 5  9 13
> > [2,] 2 6 10 14
> > [3,] 3 7 11 15
> > [4,] 4 8 12 16
> >
> >> ar2
> >>
> >      C A  E  B
> > [1,] 1 5  9 13
> > [2,] 2 6 10 14
> > [3,] 3 7 11 15
> > [4,] 4 8 12 16
> >
> >
> > I would like to join both arrays only for the columns present in both
> > ar1 and ar2 (the intersection). I would like to obtain this:
> >      A B  E
> > [1,] 1 5 13
> > [2,] 2 6 14
> > [3,] 3 7 15
> > [4,] 4 8 16
> > [5,] 5 13  9
> > [6,] 6 14 10
> > [7,] 7 15 11
> > [8,] 8 16 12
> >
> > (rows 5-8 correspond to ar2)
> >
> > I have tried several things but I am unable to accomplish it. Any
> > experienced user could give me some advice, please?
> >
> > I have another question: how can I sort the columns of an array
> > according to its column names (for ar2, change CAEB to ABCE)?
> >
> > Thanks in advance!
> > Federico
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
> >
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>


-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list