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

问题描述 投票:1回答:1

我有这样的数据集

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")

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

r date r-caret lubridate
1个回答
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')

© www.soinside.com 2019 - 2024. All rights reserved.