On Mar 16, 2012, at 5:51 AM, zhu free wrote:
Hi everyone,
I have a question for R code to merge.
Say I have two dataframes:
File1 is:
V1 V2 V3 V4
1 100 101 name1
2 200 201 name2
2 300 301 name3
3 400 401 name4
3 500 501 name5
4 600 601 name6
4 700 701 name7
File2 is:
V1 V2 V3 V4
1 50 55 p1
3 402 449 p2
4 550 650 p3
4 651 660 p4
2 150 250 p5
2 250 350 p6
3 450 499 p7
2 100 250 p8
I hope to have the merged file3 meet the following three criteria:
(1) File1$V1==File2$V1, and
(2) File1V2>=File2$V2, and
(3) File1V3<=File2$V3.
In this case, we can see that there should be four records meet
these three
criteria. So the final merge file should looks like:
File1$V1 File1$V2 File1$V3 File1$V4 File2$V1 File2$V2 File2$V3
File2$V4
2 200 201 name2 2 150
250 p5
2 200 201 name2 2 100
250 p8
2 300 301 name3 2 250
350 p6
4 600 601 name6 4 550
650 p3
Is there any one know how to make R code to achieve this? I thought
out a
way to use for loop to read for each row in the file1 to compare the
whole
data frame in file2 to find the mathcing rows but for loop takes so
much
time. I would like to have a vectorized code to make it faster but I
don't
know how to manage this.
Why not merge on the exact criterion and then subset out the rows that
qualify on the logical tests?
dfm <- merge(File1, File2, 1)
subset(dfm, V2.x >= V2.y & V3.x <= V3.y)
V1 V2.x V3.x V4.x V2.y V3.y V4.y
2 2 200 201 name2 150 250 p5
4 2 200 201 name2 100 250 p8
6 2 300 301 name3 250 350 p6
12 4 600 601 name6 550 650 p3
--
David Winsemius, MD
West Hartford, CT
______________________________________________
R-help@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.