2014-10-09 149 views
1

根據其他日期,我需要將數字轉換爲完整日期。由於我分析的動作是在變量「fechafin」後的一天開始的,我預測一天不是日期,所以我需要將它轉換爲日期,但是如果我說第7天它必須是:2014-07 -07,如果我說第三,必須在2014-08-03。根據其他日期將數字轉換爲日期

下面是一個例子:

final_muestra1<-data.frame(prior_day1=c(1:17)) 

fechafin=as.Date('2014-07-06') 

所以我定義一個函數:

add.months= function(date,n) seq(date, by = paste (n, "months"), length = 2)[2] 

和行動的第一天會是:

diapri<-as.numeric(format(fechafin+1, "%d"))  

然後我需要計算我預測的日曆日期,所以我用ifelse(因爲我有NA我添加另一個ifelse)

final_muestra1$prior_day1_comp<- 
    ifelse(!is.na(final_muestra1$prior_day1), 
      ifelse(final_muestra1$prior_day1>=diapri, 
           fechafin-diapri+final_muestra1$prior_day1, 
            add.months((fechafin-diapri+final_muestra1$prior_day1),1)),NA) 

我收到以下錯誤:

Error in seq.Date(date, by = paste(n, "months"), length = 2) :
'from' must be of length 1

我需要得到如下表:

prior_day1 prior_day1_comp 
1   1 2014-08-01 
2   2 2014-08-02 
3   3 2014-08-03 
4   4 2014-08-04 
5   5 2014-08-05 
6   6 2014-08-06 
7   7 2014-07-07 
8   8 2014-07-08 
+0

我沒有完全理解所期望的行爲是什麼(?是正確的,2014年7月7日是表中兩次),但出現錯誤,因爲'date'輸入到'add.months'是從2014-06-30到2014-07-16的日期向量,但必須是單個值,因爲它是'seq.Date'的開始。 – thie1e 2014-10-09 18:37:37

+0

@ Khl4v,不,這是一個錯誤。這個想法非常簡單:保持一天,但根據一天更改月份。如果一天比迪普普里還要大,那麼保持月份的小一點,然後再增加一個月。謝謝 – GabyLP 2014-10-09 18:40:52

+0

@akrun,嗨。有些月有30天 – GabyLP 2014-10-09 18:53:44

回答

0

我調試你剛纔的代碼。做檢查,如果這是罰款:

library(chron) 
final_muestra1<-data.frame(prior_day1=c(1:17)) 
fechafin=as.Date('2014-07-06') 
diapri<-as.numeric(format(fechafin, "%d")) 
add.months= function(date) seq(chron(as.numeric(date)), by = "months", length = 2)[2] 

for (i in 1:nrow(final_muestra1)){a[i]<-ifelse(!is.na(final_muestra1$prior_day1[i]),ifelse(final_muestra1$prior_day1[i]>diapri, fechafin-diapri+final_muestra1$prior_day1[i], add.months(fechafin-diapri+final_muestra1$prior_day1[i])),NA)} 

final_muestra1$prior_day1_comp<-a 

final_muestra1 
+0

是的,但我不想使用另一個庫 – GabyLP 2014-10-09 19:54:23

1

我解決這個問題的另一種方式(可怕的): 我創造了另一個日期:

fecha_fin_cart=as.Date('2014-08-06') 

diapri<-as.numeric(format(fechafin+1, "%d"))  



fechafin_pri<-as.Date(format(fechafin, "%Y-%m-01")) 

fecha_fin_cart<-as.Date(format(fecha_fin_cart, "%Y-%m-01")) 

創建另一個函數:

gg<-function(d) { 
    NAs <- is.na(d) 
    august <- (!is.na(d) & d <= diapri) 
    july <- (!is.na(d) & d > diapri) 

    ret <- rep(as.Date("2014-01-01"), length(d)) 
    ret[august] <- (fecha_fin_cart) + (d[august]-1) 
    ret[!august] <-(fechafin_pri) + (d[!august]-1) 
    return(ret) 
} 




final_muestra1$xx<-gg(final_muestra1$prior_day1) 

然後:

final_muestra1 
prior_day1   xx 
1   1 2014-08-01 
2   2 2014-08-02 
3   3 2014-08-03 
4   4 2014-08-04 
5   5 2014-08-05 
6   6 2014-08-06 
7   7 2014-07-07 
8   8 2014-07-08 
9   9 2014-07-09 
10   10 2014-07-10 
11   11 2014-07-11 
12   12 2014-07-12 
13   13 2014-07-13 
14   14 2014-07-14 
15   15 2014-07-15 
16   16 2014-07-16 
17   17 2014-07-17 
18   NA  <NA>