sqldf更新错误
sqldf update error
我有两个数据集,比如
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 列上匹配,[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
注意:我把"Index"改成了"rn",否则会报错
我有两个数据集,比如
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 列上匹配,[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
注意:我把"Index"改成了"rn",否则会报错