2014-12-02 55 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