[R! sqldf中的posIXCT

时间:2014-12-02 00:04:13

标签: 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

1 个答案:

答案 0 :(得分:0)

目前还不清楚是什么意思,但显示的代码有这些问题:

  1. Month用于数据,但month用于SQL语句

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

  3. 该声明正在尝试按Mediasum(Total_Click)进行分组。按聚合值进行分组是不合法的,尽管可以通过根据您的意图嵌套选择来完成。

  4. 由于语句按Media进行分组,所以expressoin count(distinct(Media)) from All_Data 将始终为1,因为此类组中只能有一个Media

  5. 你需要澄清你的意图,但是如果我们放弃或修正了我们可以得到的各个点:

    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")
    

    更新:其他修订。