na.fill表示意外结果的日期

时间:2018-04-12 17:19:10

标签: r date zoo

我尝试使用NA将日期向量中的zoo::na.fill na值替换为另一个值,但是用#34; 1970-01-02&#替换了我的NA值34;而不是我指定的值:

library(zoo)
a <- as.Date(c(NA, '2018-01-01'))

na.fill(a, as.Date('2018-01-02'))
[1] "1970-01-02" "2018-01-01"

为什么会这样?它是一个错误还是我需要指定一些东西,以便它可以按预期工作   注意:我知道我们可以使用a[is.na(a)] <- as.Date('2018-01-02'),但这个问题与动物园中的na.fill

有关

1 个答案:

答案 0 :(得分:4)

心爱的In [22]: z = model.predict(x) In [23]: z.shape Out[23]: (1, 1, 64, 64, 1) 函数

动物园包是处理zoo::na.*值的一个很好的函数源,它们一直广泛用于非NA个对象,但它们是用数字值​​编写的时间序列。一个索引。 zoo的行为有时会在非数字向量上按预期工作,但有时不会如zoo::na.*和其他一些情况那样。

他们在zoo::na.fill向量

上的行为概述

一些示例数据。我们使用Date,因此我不必每次都提供原点。

zoo::as.Date

(a <- zoo::as.Date(c(10000, NA, 10002))) #> [1] "1997-05-19" NA "1997-05-21" (b <- zoo::as.Date(10001)) #> [1] "1997-05-20" zoo::na.aggregate(a) # As expected #> [1] "1997-05-19" "1997-05-20" "1997-05-21" zoo::na.approx(a) # Converts to numeric #> [1] 10000 10001 10002 zoo::as.Date(zoo::na.approx(a)) # Workaround #> [1] "1997-05-19" "1997-05-20" "1997-05-21" zoo::na.fill(a, b) # Coerces b to logical TRUE then to numeric - see below #> [1] "1997-05-19" "1970-01-02" "1997-05-21" zoo::as.Date(zoo::na.fill(as.numeric(a), as.numeric(b))) # Workaround #> [1] "1997-05-19" "1997-05-20" "1997-05-21" zoo::na.locf(a) # As expected #> [1] "1997-05-19" "1997-05-19" "1997-05-21" zoo::na.spline(a) # Converts to numeric #> [1] 10000 10001 10002 zoo::as.Date(zoo::na.spline(a)) # Workaround #> [1] "1997-05-19" "1997-05-20" "1997-05-21" zoo::na.trim(c(NA, NA, a, NA, NA)) # Converts to numeric #> [1] 10000 NA 10002 zoo::as.Date(zoo::na.trim(c(NA, NA, a, NA, NA))) # Workaround #> [1] "1997-05-19" NA "1997-05-21" zoo::na.fill向量

的详细信息

Date(最终完成工作)的源代码中有这样的:

na.fill.zoo

as.cls <- if (is.integer(coredata(object))) { as.integer } else if (is.numeric(coredata(object))) { as.numeric } else if (is.character(coredata(object))) { as.character } else { as.logical } class(coredata(object))相同,即class(a)。由于没有Date选项,Date默认为as.cls

接下来发生的事情是as.logical参数(基本上)已应用fill。在这种情况下,as.cls为非零fill,会被强制转换为用于填充Date的数字1

然后在结尾处将返回值强制转换为NA的类,即日期。当然objectas.Date(1)