2014-12-02 65 views
0

第一次问题,所以如果我错过了一些东西,我很抱歉:R! posIXCT在sqldf

我导入了一个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

这个月'2014-09-01'实际上是否存在于excel文件中? – Alex 2014-12-02 00:29:35

+1

并注意'month!= Month'。 (R是区分大小写的,你可能会考虑修复你的问题标题,因为此刻它“只是丑陋”。) – 2014-12-02 00:41:55

+0

听不到答案我会认为拼写是问题,并投票结束为一个简单的错字。 – 2014-12-02 00:58:00

回答

0

它不清楚是什么意图,但显示的代码有这些问题:

  1. Month在数据使用,但month在SQL语句中

  2. 的SQLite没有日期或时间类型等使用,如果你发送一个POSIXct值的SQLite它将被解释为因为秒数UNIX时代(在GMT时区)。因此,月份与字符串的比较将不起作用。您可以使用SQLite strftimedate函数将秒数转换为yy-mm-dd。或者使用具有日期时间类型的数据库。 sqldf支持H2数据库,它支持日期和时间类型。

  3. 该声明尝试按Mediasum(Total_Click)分组。按汇总值分组是不合法的,尽管也许可以通过嵌套选择取决于您的意图。

  4. 由于语句由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") 

更新:杂项修订。

+0

对于延迟回复,我表示歉意。月份到月份的错字不是我测试过的问题,这是一个错字,在这里不是原来的R代码谢谢 VJ – user4313679 2014-12-02 01:42:15