2016-11-01 37 views
1

相關格式我有12000行以下的(改變IP地址,很明顯)數據集:R輸入語言分割的數據幀轉化爲圖形

Date      good? ip 
11670 2016-10-31 00:03:30 TRUE 127.0.0.1 
11671 2016-10-31 00:03:23 TRUE 127.0.0.1 
11672 2016-10-31 00:03:20 TRUE 127.0.0.1 
11673 2016-10-31 00:03:11 TRUE 127.0.0.1 
11674 2016-10-31 00:03:08 TRUE 127.0.0.1 
11675 2016-10-31 00:02:59 FALSE 127.0.0.1 
11676 2016-10-31 00:02:53 TRUE 127.0.0.1 
11677 2016-10-31 00:02:49 FALSE 127.0.0.1 
11678 2016-10-31 00:02:44 FALSE 127.0.0.1 
11679 2016-10-31 00:02:40 TRUE 127.0.0.1 

所以,我做了一些事情,這一點,比如「獲取所有具有超過100行的TRUE和FALSE的所有IP地址」等。

我想把上面的代碼轉換成一個可以輕鬆實現的格式,在那裏我可以將「好」的bool計數並將其分組爲1小時。喜歡的東西:

date    TRUE FALSE 
2016-10-31 00:00:00 342 1010 
2016-10-31 01:00:00 544 890 

我試過cut.POSIXt(data$date, breaks = "hour"),但沒有保存的布爾狀態,也給了我一個unplottable對象。

我試過lapply(split(votes, cut(votes$date, "hour")), function(x) summary (x[2])),我在網上找到並正好適合我的使用情況,但

1)我不明白了很多正在發生的事情超出了切出分裂 2)它給了我一個列表中有一個字符後跟一個字符的blob字符日期,我無法繪圖

我應該在這裏採取什麼變換和步驟?我嘗試聚合,但我總是失去TRUE/FALSE區別。

目標是製作一個每小時間隔有兩個彩條的情節,藍色表示總小時間間隔內總誤報總數爲真。

+0

請給一個工作示例,所以我們可以測試它。你可以使用我喜歡的dput() – timat

+0

@timat,但是我不能,因爲我實際上使用了敏感的生產數據,並且無法複製該數據。 雖然我得到了答案。我非常感謝你的興趣。 – JapanRob

回答

1

下面是與data.table

library(data.table) 
dt <- data.table(df) 

變化對應的日期格式格式的解決方案,在你的榜樣,它看起來像有數據之前的ID,您之前應該將其刪除。

dt$date<- as.POSIXct(dt$date,format="%d/%m/%Y %H:%M", tz = "GMT") 

使用切割生成小時類別

dt$break_hour <- cut(dt$date, breaks="hour") 

使用data.table(除了R fuinction基地像aggregate更快)來創建列

dt <- dt[,list(good = sum(good), bad = sum(!good)), by=break_hour ] 
0

根據您的示例數據,下面是一個使用dplyr的方法,假設df$DatePOSIXct類型。

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(date = format(Date, "%Y-%m-%d"), 
      hour = format(Date, "%H"), 
      good = as.character(good)) %>% 
    summarise(count = n()) %>% 
    spread(key = good, value = count) 
#  date hour `FALSE` `TRUE` 
#*  <chr> <chr> <int> <int> 
#1 2016-10-31 00  3  7 

如果你的目的是繪製,你也許並不需要的spread()最後一步,才能使用什麼來將其插入ggplot2例如。

+0

df%>% 什麼是%>%符號? – JapanRob

+0

@JapanRob他們稱之爲管道操作員,請看這裏http://genomicsclass.github.io/book/pages/dplyr_tutorial.html – timat

+0

@timat謝謝! – JapanRob