我需要将一个数字转换为完整的一天,具体取决于另一个日期。由于我分析的动作是在变量" fechafin"之后一天开始的。而且我预测一天不是约会,我需要将它改为约会,但如果我说第7次就必须:2014-07-07,如果我说第3次,则必须是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)
我收到以下错误:
seq.Date中的错误(date,by = paste(n,&#34; months&#34;),length = 2):
&#39;从&#39;必须长度为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 :(得分: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>
答案 1 :(得分: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