我有一个.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字段中提取月份,计算每个月中每个“团队”字符串的发生率并将它们相互映射,但我不知道哪些函数处理这些事情而我正在努力文档。
我知道我现在处于早期阶段,所以即使只是指向我应该阅读的功能的指针也会受到赞赏。
答案 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()
答案 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)
我希望这会有所帮助