2012-08-17 31 views
1

我有一個.csv文件中的數據,顯示不同團隊在不同日期收到的查詢。查詢中輸入如下:如何繪製R中日期部分的發生率?

Team,Date_received,Date_answered 
Team 1,31/01/10,05/02/10 
Team 3,05/03/10,17/04/10 
... 

我想繪製出多少查詢在每個的過去六個月收到的每個團隊的圖形,但我是新來的R和越來越行不通快。我查閱了時間系列文檔(在O'Reilly的R in a Nutshell中),但它似乎比我需要的複雜得多。

到目前爲止我讀過的數據和轉換的日期字符串成POSIXlt如下:

c_data <- read.table("~/data.csv", header=T, sep=",") 
c_data$Date_received <- as.Date(c_data$Date_received, "%d/%m/%y") 
c_data <- as.POSIXlt(c_data$Date_received) 
... 

但是從那裏我迷路了。我想要做的是從POSIXlt字段中提取月份,計算每個月的每個「團隊」字符串的發生率並將它們相互對照,但我不知道哪些函數處理這些事情,並且我正在努力文檔。

我知道我在這裏的早期階段,所以即使只是一個指針,我應該閱讀的函數將不勝感激。

回答

1

一些虛擬數據開始:

c_data <- data.frame(Team=paste("team", sample(1:3,10, replace=TRUE)), 
        Date_received=paste(sample(1:31,10,replace=TRUE), sample(1:12,10,replace=TRUE), rep(10,10,replace=TRUE), sep="/")) 
c_data 
    Team Date_received 
1 team 3  13/7/10 
2 team 1  2/5/10 
3 team 2  14/5/10 
4 team 1  15/4/10 
5 team 1  25/1/10 
6 team 3  30/4/10 
7 team 3  23/9/10 
8 team 3  7/9/10 
9 team 2  7/6/10 
10 team 2  4/6/10 

首先,你必須將日期聲明爲日期對象。

c_data$Date_received <- as.Date(c_data$Date_received, "%d/%m/%y") 

要提取一個月,沒有什麼簡單:

c_data$month <- format(c_data$Date_received, "%m") 
c_data$month 
[1] "07" "05" "05" "04" "01" "04" "09" "09" "06" "06" 

,然後找到每月各隊的發病率,你只需要根據自己的球隊,幾個月製表:

t_data <- table(c_data$Team, c_data$month) 
t_data 

     01 04 05 06 07 09 
    team 1 1 1 1 0 0 0 
    team 2 0 0 1 2 0 0 
    team 3 0 1 0 0 1 2 

,現在作爲一個data.frame(密謀目的):

d_data <- as.data.frame(t_data) 
d_data 
    Var1 Var2 Freq 
1 team 1 01 1 
2 team 2 01 0 
3 team 3 01 0 
4 team 1 04 1 
5 team 2 04 0 
6 team 3 04 1 
7 team 1 05 1 
8 team 2 05 1 
9 team 3 05 0 
10 team 1 06 0 
11 team 2 06 2 
12 team 3 06 0 
13 team 1 07 0 
14 team 2 07 0 
15 team 3 07 1 
16 team 1 09 0 
17 team 2 09 0 
18 team 3 09 2 

# Back to Date objects 
d_data$Var2 <- as.Date(paste("1",d_data$Var2,"10",sep="/"), "%d/%m/%y") 

library(ggplot2) 
ggplot(d_data, aes(Var2, Freq, group = Var1, color = Var1)) + 
geom_line() 

enter image description here

+0

非常感謝。我從來沒有在R中提出過一個解決方案,所以我最終在python中預燒了數據,但是這樣做會削減額外的步驟。 – 2012-11-01 13:31:20

0

退房的lubridate

下面的例子

df <- read.table(header=TRUE, text=" 
Team Date_received Date_answered 
Team1 31/01/10 05/02/10 
Team3 05/03/10 17/04/10 
      ") 

require(lubridate) 
date_Received <- dmy(df$Date_received) 

month(date_Received) 

我希望這有助於