我尝试使用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
答案 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
的类,即日期。当然object
是as.Date(1)
。