【问题标题】:Error in as.Date.numeric(value) : 'origin' must be supplied with NAN valuesas.Date.numeric(value) 中的错误:'origin' 必须提供 NAN 值
【发布时间】:2017-12-24 17:59:49
【问题描述】:

我有一个这样的数据集

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

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

【问题讨论】:

  • 也许,你应该跳过行,有些日期有 Nan 值,并创建一个没有该行的数据框?
  • 这是个好主意,但我无法在真实数据集中实现
  • 你不能成功,因为你不知道如何,或者你不能成功,因为你必须保留所有数据,即使在行中,存在 NaN?
  • @Edward 你不应该将predict 应用于具有相同变量的数据集,即c('c','d')
  • ?preProcess 声明 “可以根据训练数据估计预处理转换(居中、缩放等),并将其应用于具有相同变量的任何数据集。”。所以你的predict 声明应该像dfTrans = predict(trans, df[, c('c','d')])

标签: r date r-caret lubridate


【解决方案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)

我们必须将日期变量作为因子

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多