我有这样的数据集
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")
但错误仍然存在。谢谢你的帮助
答案 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')