如何绘制R中某个日期的部分发生率?

时间:2012-08-17 13:42:45

标签: r date plot

我有一个.csv文件中的数据,显示不同团队在不同日期收到的查询。查询如下:

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字段中提取月份,计算每个月中每个“团队”字符串的发生率并将它们相互映射,但我不知道哪些函数处理这些事情而我正在努力文档。

我知道我现在处于早期阶段,所以即使只是指向我应该阅读的功能的指针也会受到赞赏。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

我希望这会有所帮助