as.Date.numeric(value)出错:' origin'必须提供NAN值

时间:2017-12-24 17:59:50

标签: r date r-caret lubridate

我有这样的数据集

library(lubridate)
df = data.frame(a= dmy(c('10.11.2017', '11.10.2017', '11.10.2017')), 
                b = dmy(c('10.10.2017', NaN, '11.10.2017')), c=c(1,2, 3))

我必须得到一个新变量

df$d = as.numeric(df$a-df$b)

然后用插入符号进行一些预处理

library(caret)
trans = preProcess(df[, c('c','d')], method = c("BoxCox", "medianImpute")) 

下一步出现错误

dfTrans = predict(trans, df)
Error in as.Date.numeric(value) : 'origin' must be supplied

问题出在NaN值。当我们没有NaN时一切都好。 我试图解决如下

df$a = as.Date(df$a, origin="1970-01-01")
df$b = as.Date(df$b, origin="1970-01-01")

df$d = as.numeric(df$a-df$b, origin="1970-01-01")

但错误仍然存​​在。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

谢谢@Prem

解决

df = data.frame(a= dmy(c('10.11.2017', '11.10.2017', '11.10.2017')), 
                b = dmy(c('10.10.2017', NaN, '11.10.2017')), c=c(1,2, 3), d=c(1,2, 3), f=c(1,NaN, 3))

df$g = as.numeric(df$a-df$b)

我们必须将Date变量设为因子

df$b = as.factor(df$b) 
trans = preProcess(df[, c('c','d')], method = c("BoxCox", "medianImpute")) 
dfTrans = predict(trans, df)
> dfTrans
           a          b         c         d  f  g
1 2017-11-10 2017-10-10 0.0000000 0.0000000  1 31
2 2017-10-11       <NA> 0.8595276 0.8595276 NA NA
3 2017-10-11 2017-10-11 1.5553034 1.5553034  3  0

我们可以看到trans只适用于c('c','d')