我需要在sqldf语句上进行循环,为此我需要在sqldf代码中调用循环变量:
我的表"data"可能是:
data <- read.table(text ="
loaddate DaysRange DaysRangeNext
1 2014-03-16 30 30
2 2014-03-16 0 0
3 2014-03-16 0 0
4 2014-03-16 60 NA
5 2014-04-16 30 30
6 2014-04-16 0 30
"
,header = TRUE)
然后我将loaddate格式化为日期:
data$loaddate<-as.Date(as.character(data$loaddate), format='%Y-%m-%d')
假设我有一个向量“loaddates”:
loaddates<- unique(sort(data$loaddate))
我需要针对每个loaddate运行以下代码:
for (i in loaddates) {
sqldf("
SELECT D.LoadDate,D.DaysRange, D.DaysRangeNext,
COUNT(*) AS clientes
FROM data AS D
WHERE D.loaddate = i
GROUP BY D.LoadDate,D.DaysRange, D.DaysRangeNext
ORDER BY D.DaysRange, D.DaysRangeNext
") }
但是我遇到了以下错误:
有没有办法保留变量值并在循环内部使用它?在sqliteSendQuery(con, statement, bind.data)中的错误: 语句错误:没有这样的列:i
谢谢。
编辑:
我尝试过:
sqldf(
strwrap(sprintf("
SELECT D.LoadDate,D.DaysRange, D.DaysRangeNext,
COUNT(*) AS clientes
FROM data AS D
WHERE D.LoadDate = '%s'
GROUP BY D.LoadDate,D.DaysRange, D.DaysRangeNext
ORDER BY D.DaysRange, D.DaysRangeNext
",i),simplify=TRUE,width=1000000))
但是我得到了:
> [1] loaddate DaysRange DaysRangeNext clientes <0 rows>
> (or 0-length row.names)
print
才能看到结果。此外,你的数据集中也没有添加CodEmp
列。 - LyzandeRloaddate
列是我使用的character
类型。你的是Date
类型吗? - LyzandeR