-4

通过结合去年星期五完成的每周报告,我将以下数据放在 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)开户数分为 days.open<=30 , 30 < days.open <= 60, 60 < days.open <= 90, days open > 90 5) 与 #4 相同的计数进一步按位置细分。

我不太确定从哪里开始。

感谢您提供的任何帮助。

4

2 回答 2

3

首先将数据转换成它的格式并使用plyr包或data.table包。以下是使用ddplyfrom plyr 包的解决方案。如果你想使用 plyr,你应该阅读这篇文章。在以下代码中,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
于 2013-08-16T20:51:17.740 回答
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
于 2013-08-16T21:21:32.277 回答