我有两个数据集,像
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上的Mac上的Match列和[Dataset1.Date]应该在[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上使用了1个简单的代码
sqldf2 <- sqldf("update dataset1
set dataset1.Cons = dataset2.Cons
FROM dataset1 INNER JOIN dataset2
ON dataset1.Mac = dataset2.Mac")
但这给了我一个错误
Error in rsqlite_send_query(conn@ptr, statement) : near ".": syntax error
为了进一步计划我打算使用类似这样的方法,这绝对不正确,请也提供帮助
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)")
我感谢所有的帮助!
最佳答案
我们可以使用左连接:
# 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
注意:我将“索引”更改为“ rn”,否则将引发错误。
关于r - sqldf更新错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237299/