[R] Matched pairs with two data frames
Patrick Connolly
p_connolly at slingshot.co.nz
Fri Apr 18 11:53:36 CEST 2008
On Wed, 16-Apr-2008 at 11:58AM +0200, Udo wrote:
|> I only "need" line 1, 6 and 9. To show this,
|> I added "needed" by hand.
|>
|> age school out1 out2 needed
|> 1 1 10 9.5 1.1 yes
|> 2 1 10 9.5 2.0 no
|> 3 1 10 9.5 3.5 no
|> 4 1 10 9.5 4.9 no
|> 5 1 10 2.3 1.1 no
|> 6 1 10 2.3 2.0 yes
|> 7 1 10 2.3 3.5 no
|> 8 1 10 2.3 4.9 no
|> 9 2 20 3.3 6.5 yes
|> 10 2 20 4.1 6.5 no
|> 11 2 20 5.9 6.5 no
|> 12 3 33 NA 5.2 no
|> 13 4 11 4.6 NA no
|>
|> >Whatever it is, can't you subset them out?
|> Yes, that´s the problem. To describe what I mean, I added the
|> variable needed by hand. I don´t know how to compute such a
|> variable to subset.
|>
|>
|> My final data frame should look like this:
|> age school out1 out2 nedded
|> 1 1 10 9.5 1.1 yes
|> 6 1 10 2.3 2.0 yes
|> 9 2 20 3.3 6.5 yes
Now that I know what you want, I can see what can work. Undoubtedly,
there are far more elegant ways of doing it, but this will work.
xx <- merge(treat, control)
out <- xx[1, ] # set up the out dataframe
for(i in 2:nrow(xx)){
x.i <- xx[i, ]
kk <- logical(4)
for(j in 1:4)
kk[j] <- x.i[, j]%in%out[, j]
if(!kk[4]){ # don't add to output if last column value exists
if(!all(kk[1:3])) # a different combination of first 3 cols
out <- rbind(out, x.i)
}
}
out
age school out1 out2
1 1 10 9.5 1.1
6 1 10 2.3 2.0
9 2 20 3.3 6.5
If you have very large dataframes, you might like to improve on it.
HTH
--
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
___ Patrick Connolly
{~._.~} Great minds discuss ideas
_( Y )_ Middle minds discuss events
(:_~*~_:) Small minds discuss people
(_)-(_) ..... Anon
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
More information about the R-help
mailing list