我有一個id_client不同日期的表。我需要創建一個表格,每個客戶端的最大日期和最小日期之間的日期都是,全部爲。例如,我的表是:R-ddply:彙總時轉換爲數字的日期
tbl<-data.frame(id_cliente=c(1,1,1,1,2,3,3,3),
fecha=c('2013-01-01', '2013-06-01','2013-05-01', '2013-04-01',
'2013-01-01', '2013-01-01','2013-05-01','2013-04-01'))
tbl$fecha<-as.Date(as.character(tbl$fecha))
我需要像一個表來結束:
id_cliente fecha
1 01/01/2013
1 01/02/2013
1 01/03/2013
1 01/04/2013
1 01/05/2013
1 01/06/2013
2 01/01/2013
3 01/01/2013
3 01/02/2013
3 01/03/2013
3 01/04/2013
3 01/05/2013
我以爲我可以ddply(plyr包)使用,所以我創建了一個獲取函數個月的序列:
meses<-function(xMin, xMax){
seq(from=as.Date(xMin, , '%Y-%m-%d'), to=as.Date(xMax, '%Y-%m-%d'), by='month')}
然後我ddply適用於:
library(plyr)
vf<-ddply(tbl, .(id_cliente), summarize, maxF=max(fecha), minF=min(fecha),
sec=list(meses(xMin=minF, xMax=maxF)))
但我的表是:存儲在列表
> vf
id_cliente maxF minF sec
1 1 2013-06-01 2013-01-01 15706, 15737, 15765, 15796, 15826, 15857
2 2 2013-01-01 2013-01-01 15706
3 3 2013-05-01 2013-01-01 15706, 15737, 15765, 15796, 15826
日期被轉換爲數字。
我知道我可以將數字轉換爲日期。所以:
convFecha<-function(x){as.Date(x, origin='1970-01-01')}
然後我lapply使用:
lapply(vf$sec, convFecha)
我得到期望的結果:
[[1]]
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-04-01" "2013-05-01" "2013-06-01"
[[2]]
[1] "2013-01-01"
[[3]]
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-04-01" "2013-05-01"
在這一點上,我不知道如何創建的決賽桌。如果我嘗試將這個結果粘貼到我的表格中,它會再次以數字轉換日期。
vf$sec1<-lapply(vf$sec, convFecha)
那麼,我必須將這些日期粘貼到vf的每一行嗎?有沒有其他的方式來獲得所需的表格?下一步到達桌面需要什麼?