【发布时间】:2014-12-09 17:46:40
【问题描述】:
我需要在 R 中计算列日期的条件。Atable 将是:
PIL_final1<-data.frame( prior_day1_cart=c(4,8),
prior_day1_comp=c('2014-06-03','2014-06-07'),
dia_lim_23_cart=c('201-07-30','201-07-30') )
PIL_final1$prior_day1_comp<-as.Date(PIL_final1$prior_day1_comp, format='%Y-%m-%d')
PIL_final1$dia_lim_23_cart<-as.Date(PIL_final1$dia_lim_23_cart, format='%Y-%m-%d')
所以我使用 ifelse:
PIL_final1$llamar_dia<-ifelse(PIL_final1$prior_day1_cart+6>23,
PIL_final1$dia_lim_23_cart ,
PIL_final1$prior_day1_comp+6)
但我明白了:
> PIL_final1
prior_day1_cart prior_day1_comp dia_lim_23_cart llamar_dia
1 4 2014-06-03 0201-07-30 16230
2 8 2014-06-07 0201-07-30 16234
如果我这样做:
> PIL_final1$prior_day1_comp+6
[1] "2014-06-09" "2014-06-13"
我得到了正确的结果。
如何执行 ifelse 并获取日期?谢谢。
如果我尝试这个,我仍然会得到一个数字(虽然不同):
> PIL_final1$llamar_dia<-ifelse(PIL_final1$prior_day1_cart+6>23,
+ PIL_final1$dia_lim_23_cart ,
+ as.Date(PIL_final$prior_day1_comp+6,format="%Y-%m-%d"))
> PIL_final1
prior_day1_cart prior_day1_comp dia_lim_23_cart llamar_dia
1 4 2014-06-03 0201-07-30 16376
2 8 2014-06-07 0201-07-30 16377
版本:
如果我这样做:
> as.Date(ifelse(PIL_final1$prior_day1_cart+6>23, PIL_final1$dia_lim_23_cart ,
+ PIL_final1$prior_day1_comp+6), format="%Y-%m-%d", origin="1970-01-01")
[1] "2014-06-09" "2014-06-13"
我得到了正确的结果,但是如果我用向量结果替换 ifelse,我得到了错误的日期:
> PIL_final1$llamar_dia<-ifelse(PIL_final1$prior_day1_cart+6>23,
+ PIL_final1$dia_lim_23_cart ,
+ PIL_final$prior_day1_comp+6)
> as.Date(PIL_final1$llamar_dia, format="%Y-%m-%d", origin="1970-01-01")
[1] "2014-11-02" "2014-11-03"
【问题讨论】:
-
将结果包装在
as.Date中。 -
@BondedDust,嗨。我也一样。请查看版本。
-
我是说要包装结果:
as.Date(ifelse(...3args...))... 没有将参数包装在as.Date中。 -
@BondedDust,我收到一个错误:> as.Date(PIL_final1$llamar_dia, format="%Y-%m-%d") as.Date.numeric(PIL_final1$llamar_dia, format = "%Y-%m-%d") : 'origin' 必须提供
-
这按预期工作:
PIL_final1$llamar_dia<-as.Date(ifelse(PIL_final1$prior_day1_cart+6>23, PIL_final1$dia_lim_23_cart , PIL_final1$prior_day1_comp+6), format="%Y-%m-%d", origin="1970-01-01")。可能不需要格式参数。 `
标签: r date if-statement