第一次提问,所以如果我错过了一些我道歉的话:
我将一个excel文件导入R!使用XLconnect,str()函数如下:
data.frame': 931 obs. of 5 variables:
$ Media : chr "EEM" "EEM" "EEM" "EEM" ...
$ Month : POSIXct, format: "2014-08-01" "2014-08-01" "2014-08-01" "2014-08-01" ...
$ Request_Row : num 8 25 26 37 38 44 53 62 69 83 ...
$ Total_Click : num 12 9 9 8 8 8 7 7 7 7 ...
$ Match_Type : chr "S" "S" "S" "S" ...
当我使用以下sqldf时,我没有选择任何行,无论如何可能出错:
sqldf(" select Media, sum(Total_Click) , avg(Request_Row), min(Request_Row) , max(Request_Row), count(distinct(Media)) from All_Data
where Request_Row < 100
and month='2014-09-01'
group by 1,2 order by 2,6 desc ")
<0 rows> (or 0-length row.names)
感谢您的帮助
VJ
答案 0 :(得分:0)
目前还不清楚是什么意思,但显示的代码有这些问题:
Month
用于数据,但month
用于SQL语句
SQLite没有日期或时间类型,因此如果您向SQLite发送POSIXct值,它将被解释为自UNIX纪元以来的秒数(在GMT时区中)。因此,月份与字符串的比较不起作用。您可以使用SQLite strftime
或date
函数将秒数转换为yy-mm-dd。或者使用具有日期时间类型的数据库。 sqldf支持H2数据库,它支持日期和时间类型。
该声明正在尝试按Media
和sum(Total_Click)
进行分组。按聚合值进行分组是不合法的,尽管可以通过根据您的意图嵌套选择来完成。
由于语句按Media
进行分组,所以expressoin count(distinct(Media)) from
All_Data 将始终为1,因为此类组中只能有一个
Media
。
你需要澄清你的意图,但是如果我们放弃或修正了我们可以得到的各个点:
sqldf("select
Media,
sum(Total_Click) sum_Total_Click,
avg(Request_Row) avg_Request_Row,
min(Request_Row) min_Request_Row,
max(Request_Row) max_Request_Row
from All_Data
where Request_Row < 100
and date(month, 'unixepoch', 'localtime') = '2014-08-01'
group by 1 order by 2 desc")
给出:
Media sum_Total_Click avg_Request_Row min_Request_Row max_Request_Row
1 EEM 38 24 8 37
RH2 要使用RH2软件包和H2数据库,请确保安装了Java和RH2(RH2包含H2数据库,因此不需要单独安装)然后:
library(RH2)
library(sqldf)
sqldf("...")
其中...被替换为相同的SQL语句,但日期比较简化为此行:
and month = '2014-08-01'
数据:发布到SO R标记时,请使用dput
显示您的数据。在这种情况下使用了这个:
All_Data <-
structure(list(Media = c("EEM", "EEM", "EEM", "EEM"), Month = structure(c(1406865600,
1406865600, 1406865600, 1406865600), class = c("POSIXct", "POSIXt"
), tzone = ""), Request_Row = c(8, 25, 26, 37), Total_Click = c(12,
9, 9, 8), Match_Type = c("S", "S", "S", "S")), .Names = c("Media",
"Month", "Request_Row", "Total_Click", "Match_Type"), row.names = c(NA,
-4L), class = "data.frame")
更新:其他修订。