R:具有相同日期和属性的聚合数据行为时间序列的每周计数

时间:2013-08-16 20:41:41

标签: r count statistics aggregate time-series

我通过结合去年星期五完成的每周报告,将以下数据放在Excel中。每行都是一个开放帐户。

location code  days.open     report.date 
LA       C1    186          8/2/2013    
SF       C2    186          8/2/2013    
SF       M     18           8/2/2013    
LA       C1    130          7/26/2013    
HB       M     30           7/26/2013    
LA       F     2            7/19/2013    
HB       F     188          7/19/2013    
LA       C3    90           7/12/2013    
LB       F     30           7/12/2013    
LB       F     36           7/12/2013    
SF       M     94           7/12/2013    
NB       C1    6            7/5/2013    
HB       M     18           7/5/2013    
LB       M     35           6/28/2013    
SD       C3    201          6/28/2013    
SD       F     69           6/21/2013    

等超过一百万个条目。

这是我第一次将R用于时间序列,我需要帮助准备时间序列分析数据。

我想了解一些事情: 1)每个报告日期的未结帐户数 2)每个报告日期的开立账户数量 3)按代码在每个报告日期开立账户的数量 4)将开立账户的数量分成几天。打开< = 30,30< days.open< = 60,60< days.open< = 90,开放天数> 90 5)同样计为#4,按位置进一步细分。

我不太清楚从哪里开始。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

首先将数据转换为其格式并使用plyr包或data.table包。以下是使用plyr包中的ddply的解决方案。如果您想使用plyr,请阅读this文章。在以下代码中,mydata是您的数据。

mydata$report.date<-as.Date(mydata$report.date,"%m/%d/%Y")

library(plyr)
ddply(mydata,.(report.date),summarize, freq=length(days.open)) #1
ddply(mydata,.(report.date,location),summarize, freq=length(days.open)) #2
ddply(mydata,.(report.date,code),summarize, freq=length(days.open)) #3

生成一个变量,将days.open分配为四个区间。

mydata$new<-with(mydata,ifelse(days.open<=30,"A",ifelse(days.open>30 & days.open<=60,"B",ifelse(days.open>60 & days.open<=90,"C","D"))))

ddply(mydata,.(new),summarize, freq=length(days.open)) #4
ddply(mydata,.(new,location),summarize, freq=length(days.open)) #5

输出最后一个

   new location freq
1    A       HB    2
2    A       LA    1
3    A       LB    1
4    A       NB    1
5    A       SF    1
6    B       LB    2
7    C       LA    1
8    C       SD    1
9    D       HB    1
10   D       LA    2
11   D       SD    1
12   D       SF    2

答案 1 :(得分:1)

以下是您上一个问题的答案 - 一旦您理解了这一点,其余的将是微不足道的:

library(data.table)
dt = data.table(your_df)

cuts = c(-Inf, 30, 60, 90, Inf)
dt[, .N, by = list(cut(days.open, cuts), location)]
#          cut location N
# 1: (90, Inf]       LA 2
# 2: (90, Inf]       SF 2
# 3: (-Inf,30]       SF 1
# 4: (-Inf,30]       HB 2
# 5: (-Inf,30]       LA 1
# 6: (90, Inf]       HB 1
# 7:   (60,90]       LA 1
# 8: (-Inf,30]       LB 1
# 9:   (30,60]       LB 2
#10: (-Inf,30]       NB 1
#11: (90, Inf]       SD 1
#12:   (60,90]       SD 1