我通过结合去年星期五完成的每周报告,将以下数据放在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,按位置进一步细分。
我不太清楚从哪里开始。
感谢您提供的任何帮助。
答案 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