我有两个数据集,就像
Datset1
Index Mac Date Cons
1 35 1432425600 Nil
2 35 1431993600 Nil
3 35 1433894400 Nil
4 35 1433376000 Nil
Dataset2
Index Mac Start_Date End_Date Cons
1 35 1432339200 1432771200 D1
2 35 1433116800 1435017600 D2因此,我所要寻找的只是一个结果集,来自于Dataset1 (在dataset2和Dataset1.Date上的Mac列上匹配),Match应该在Dataset2.Start_Date & Dataset.End_Date之间,以获得列Cons。所以理想情况下,我的结果应该是
Final Dataset
Index Mac Date Cons
1 35 1432425600 D1
2 35 1431993600 Nil
3 35 1433894400 D2
4 35 1433376000 D2我试图在使用sqldf时在R中实现它,首先,我只在Mac上使用了一个简单的代码
sqldf2 <- sqldf("update dataset1
set dataset1.Cons = dataset2.Cons
FROM dataset1 INNER JOIN dataset2
ON dataset1.Mac = dataset2.Mac") 但它给了我一个错误
Rsqlite_send_query中的错误(conn@ptr,语句):近“。”:语法错误
为了更进一步,我计划使用这样的东西,这肯定是不对的,请也帮忙。
sqldf2 <- sqldf("update dataset1
set dataset1.Cons = dataset2.Cons
FROM dataset1 INNER JOIN dataset2
ON dataset1.Mac = dataset2.Mac
AND (dataset1.Date > dataset2.Start_Date & dataset1.Date<dataset2.End_Date)")我很感激你的帮助!
发布于 2016-12-20 08:36:59
我们可以使用左联接:
# dummy data*
dataset1 <- read.table(text = "
rn Mac Date Cons
1 35 1432425600 Nil
2 35 1431993600 Nil
3 35 1433894400 Nil
4 35 1433376000 Nil", header = TRUE)
dataset2 <- read.table(text = "
rn Mac Start_Date End_Date Cons
1 35 1432339200 1432771200 D1
2 35 1433116800 1435017600 D2", header = TRUE)
library(sqldf)
sqldf("select a.rn, a.Mac, a.Date, b.Cons
from dataset1 a
left join dataset2 b
on a.Mac = b.Mac and
a.Date >= b.Start_Date and
a.Date <= b.End_Date")
# rn Mac Date Cons
# 1 1 35 1432425600 D1
# 2 2 35 1431993600 <NA>
# 3 3 35 1433894400 D2
# 4 4 35 1433376000 D2注意:i将“索引”更改为"rn",否则会引发错误。
https://stackoverflow.com/questions/41237299
复制相似问题