[R] paired samples, matching rows, merge()

Cecilia Carmo cecilia.carmo at ua.pt
Fri Aug 20 15:07:13 CEST 2010


This is what I need, but my dataframe has many rows and it 
returns to me the following message:

Error: cannot allocate vector of size 120 Kb
In addition: There were 18 warnings (use warnings() to see 
them)

Could you help me,

Thanks
Cecília

Em Fri, 20 Aug 2010 08:30:16 -0400
  Gabor Grothendieck <ggrothendieck at gmail.com> escreveu:
> On Fri, Aug 20, 2010 at 6:44 AM, Cecilia Carmo 
><cecilia.carmo at ua.pt> wrote:
>> Hi everyone!
>>
>> I'm matching two samples to create one sample that have
>> pairs of observations equal for the k1 variable. Merge() 
>>doesn't work
>> because I dont't want to recycle the values.
>>
>> x <- data.frame(k1=c(1,1,2,3,3,5), 
>>k2=c(20,21,22,23,24,25))
>> x
>> y <- data.frame(k1=c(1,1,2,2,3,4,5,5), 
>>k2=c(10,11,12,13,14,15,16,17))
>> y
>> merge(x,y,by="k1")
>>  k1 k2.x k2.y
>> 1   1   20   10
>> 2   1   20   11
>> 3   1   21   10
>> 4   1   21   11
>> 5   2   22   12
>> 6   2   22   13
>> 7   3   23   14
>> 8   3   24   14
>> 9   5   25   16
>> 10  5   25   17
>>
>> I have a final dataframe with 10 rows, but I want it 
>>with 5 rows, like this:
>>  k1 k2.x k2.y
>> 1   1   20   10
>> 2   1   21   11
>> 3   2   22   12
>> 4   3   23   14
>> 5   5   25   16
>>
> 
> Try this:
> 
> x$k3 <- with(x, ave(k1, k1, FUN = seq_along))
> y$k3 <- with(y, ave(k1, k1, FUN = seq_along))
> 
> merge(x, y, by = c("k1", "k3"))



More information about the R-help mailing list