[R] Joining two files

Rui Barradas ruipbarradas at sapo.pt
Fri Nov 23 18:39:14 CET 2012


Hello,

So you need a function that can rbind and also return the total unique 
columns. It's a bit more complicated but I think this does what you want.

ADD <- function(x, y){
     cx <- colnames(x)
     cy <- colnames(y)
     if(is.null(cx) || is.null(cy)){
         d <- length(cx) - length(cy)
         if(d == 0){
             result <- rbind(x, y)
         }else{
             result <- matrix(NA, nrow = nrow(x), ncol = abs(d))
             if(d < 0){
                 result <- cbind(x, result)
                 result <- rbind(result, y)
             }else{
                 result <- cbind(y, result)
                 result <- rbind(x, result)
             }
         }
     }else{
         nx <- nrow(x)
         ny <- nrow(y)
         result <- matrix(nrow = nx + ny, ncol = length(unique(c(cx, cy))))
         colnames(result) <- unique(c(cx, cy))
         result[seq_len(nx), cx] <- x
         result[nx + seq_len(ny), cy] <- y
     }
     result
}



r1<-c(1,1,2,3)
r2<-c(2,1,2,2)
r3<-c(2,1,4,1)
data1<-cbind(r1,r2)
data2<-cbind(r1,r3)
data3<-cbind(r2, r1)

ADD(data1, data2)
ADD(data1, data3)


Hope this helps,

Rui Barradas
Em 23-11-2012 15:57, Virgile Capo-Chichi escreveu:
> Thanks Jim for your help. Your results are not what I wanted. I would like
> to see something like the matrix below. This is what I would get if I used
> the ADD Files command in SPSS. V
>
> r1 r2   r3
> 1  2   NA
> 1  1   NA
> 2  2   NA
> 3  2   NA
> 1  NA 2
> 1  NA 1
> 2  NA 4
> 3  NA 1
>
>
> 2012/11/23 jim holtman <jholtman at gmail.com>
>
>> You did not specify what you were expecting as output.  Here is one
>> way of using 'merge', but I am not sure if this is what you were
>> after:
>>
>>> r1<-c(1,1,2,3)
>>> r2<-c(2,1,2,2)
>>> r3<-c(2,1,4,1)
>>> data1<-data.frame(r1,r2)
>>> data2<-data.frame(r1,r3)
>>> data1
>>    r1 r2
>> 1  1  2
>> 2  1  1
>> 3  2  2
>> 4  3  2
>>> data2
>>    r1 r3
>> 1  1  2
>> 2  1  1
>> 3  2  4
>> 4  3  1
>>> merge(data1, data2, by = "r1", all = TRUE)
>>    r1 r2 r3
>> 1  1  2  2
>> 2  1  2  1
>> 3  1  1  2
>> 4  1  1  1
>> 5  2  2  4
>> 6  3  2  1
>>
>> On Fri, Nov 23, 2012 at 10:11 AM, Virgile Capo-Chichi
>> <vcapochichi at gmail.com> wrote:
>>> Hi Jim,
>>> I did not try merge because I thought it only adds variables instead of
>>> cases. Below is what I am trying to do. When I joined data1 and data2, I
>>> was was expecting three variables: r1, r2 and r3 with r2 and r3
>> presenting
>>> missing values where they did not exist in the first place. V
>>>
>>>> r1<-c(1,1,2,3)
>>>> r2<-c(2,1,2,2)
>>>> r3<-c(2,1,4,1)
>>>> data1<-cbind(r1,r2)
>>>> data2<-cbind(r1,r3)
>>>> data1
>>>       r1 r2
>>> [1,]  1  2
>>> [2,]  1  1
>>> [3,]  2  2
>>> [4,]  3  2
>>>> data2
>>>       r1 r3
>>> [1,]  1  2
>>> [2,]  1  1
>>> [3,]  2  4
>>> [4,]  3  1
>>>> data<-rbind(data1, data2)
>>>> data
>>>       r1 r2
>>> [1,]  1  2
>>> [2,]  1  1
>>> [3,]  2  2
>>> [4,]  3  2
>>> [5,]  1  2
>>> [6,]  1  1
>>> [7,]  2  4
>>> [8,]  3  1
>>>> data3<-cbind(r2, r1)
>>>> data_test<-rbind(data1, data3)
>>>> data1
>>>       r1 r2
>>> [1,]  1  2
>>> [2,]  1  1
>>> [3,]  2  2
>>> [4,]  3  2
>>>> data3
>>>       r2 r1
>>> [1,]  2  1
>>> [2,]  1  1
>>> [3,]  2  2
>>> [4,]  2  3
>>>> data_test
>>>       r1 r2
>>> [1,]  1  2
>>> [2,]  1  1
>>> [3,]  2  2
>>> [4,]  3  2
>>> [5,]  2  1
>>> [6,]  1  1
>>> [7,]  2  2
>>> [8,]  2  3
>>>
>>>
>>> 2012/11/23 jim holtman <jholtman at gmail.com>
>>>
>>>> Have you tried 'merge'?
>>>>
>>>> You did not provide any sample data (use 'dput' if you do) so that we
>>>> could show a possible solution.
>>>>
>>>> On Fri, Nov 23, 2012 at 9:56 AM, Virgile Capo-Chichi
>>>> <vcapochichi at gmail.com> wrote:
>>>>> Hello all,
>>>>> I al trying to join (ADD FILES in SPSS) two files using the rbind()
>>>>> function. However, with rbind() R does not behave the same way as
>> SPSS. I
>>>>> mean, it just concatenates the two blocs with no consideration for
>> same
>>>>> variables if these are not in the same position in the two files.
>> Anyone
>>>>> knows a function that performs the SPSS ADD FILES task? Thanks, V
>>>>>
>>>>>          [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> R-help at r-project.org 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
>>>> Data Munger Guru
>>>>
>>>> What is the problem that you are trying to solve?
>>>> Tell me what you want to do, not how you want to do it.
>>>>
>>>          [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org 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
>> Data Munger Guru
>>
>> What is the problem that you are trying to solve?
>> Tell me what you want to do, not how you want to do it.
>>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org 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.




More information about the R-help mailing list