【发布时间】: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')])