2016-01-20 65 views
1

如何在R中完成一個複雜(即不是等同連接)?如何在R中進行復雜的連接?

例如,假設我們有以下數據:

B <- data.frame(m = 1:100, x = rnorm(100)) 
A <- data.frame(id = 1:200, m0 = sample(B$m, 200, replace = TRUE)) 
A$m1 <- A$m0 + sample(1:20, nrow(A), replace = TRUE) 

然後在SQL人們可以做這樣的事情:

SELECT A.id, SUM(B.x) 
FROM A 
JOIN B ON B.m BETWEEN A.m0 AND A.m1 
GROUP BY A.id 

一個人怎麼可以做R中一些類似的(除了使用一個循環)?

+2

您可能正在尋找類似[這裏](http://stackoverflow.com/questions/3916195/finding-overlap-in-ranges-with- r)(重疊連接)。 –

+0

Gabor的回答http://stackoverflow.com/a/24480301/239838(以及該問題中的其他答案)提供了許多方法。 – banbh

回答

2

一種方法是使用sqldf:

# Using data defined in question 
library('sqldf') 
R <- sqldf('select A.id, sum(B.x) s from A join B on B.m between A.m0 and A.m1 group by A.id')