在 R 中用 NA 替换缺失数据
Replace missing data with NA in R
我正在根据存储在 xts 对象列表中的几个观察结果构建时间序列 (xts)。
提取出来的数据有时会丢失,R报错:
"Error in NextMethod(.Generic) : replacement has length zero"
我希望 R 报告 NA。我想答案就在 tryCatch() 中,但我无法确定它。
# Here is a MCVE:
Contract <- list(xts(1:12,order.by=Sys.Date()-1:12),
xts(1:10,order.by=Sys.Date()-1:10),
xts(1:8,order.by=Sys.Date()-2:9))
Vol <- xts(matrix(0, 12,3, byrow = FALSE),order.by=Sys.Date()-1:12)
for (A in 1:12){for (B in 1:3){
Vol[A,B] <- Contract[[B]][index(Vol)[A]]
}}
Vol
如有任何帮助,我们将不胜感激。
(此外,如果有人将双循环矢量化的聪明想法...)
我们可以检查是否将生成的观察结果强制转换为数字产量 numeric(0)
。
这是一个 sapply()
的解决方案,它根据所有日期的向量创建矩阵。
all.dates <- Sys.Date() - 1:12
MX <- t(sapply(seq_along(all.dates), function(x)
sapply(seq_along(Contract), function(y) {
obs <- Contract[[y]][all.dates[x]]
if (identical(as.numeric(obs), numeric(0))) # reporting NA
xts(NA, all.dates[x])
else
obs
}
)))
Vol <- xts(MX, order.by=all.dates)
rm(MX) # clean up
结果
> Vol
[,1] [,2] [,3]
2019-01-09 12 NA NA
2019-01-10 11 NA NA
2019-01-11 10 10 NA
2019-01-12 9 9 8
2019-01-13 8 8 7
2019-01-14 7 7 6
2019-01-15 6 6 5
2019-01-16 5 5 4
2019-01-17 4 4 3
2019-01-18 3 3 2
2019-01-19 2 2 1
2019-01-20 1 1 NA
能否请您检查一下这是否是您期望的结果?
我正在根据存储在 xts 对象列表中的几个观察结果构建时间序列 (xts)。 提取出来的数据有时会丢失,R报错:
"Error in NextMethod(.Generic) : replacement has length zero"
我希望 R 报告 NA。我想答案就在 tryCatch() 中,但我无法确定它。
# Here is a MCVE:
Contract <- list(xts(1:12,order.by=Sys.Date()-1:12),
xts(1:10,order.by=Sys.Date()-1:10),
xts(1:8,order.by=Sys.Date()-2:9))
Vol <- xts(matrix(0, 12,3, byrow = FALSE),order.by=Sys.Date()-1:12)
for (A in 1:12){for (B in 1:3){
Vol[A,B] <- Contract[[B]][index(Vol)[A]]
}}
Vol
如有任何帮助,我们将不胜感激。 (此外,如果有人将双循环矢量化的聪明想法...)
我们可以检查是否将生成的观察结果强制转换为数字产量 numeric(0)
。
这是一个 sapply()
的解决方案,它根据所有日期的向量创建矩阵。
all.dates <- Sys.Date() - 1:12
MX <- t(sapply(seq_along(all.dates), function(x)
sapply(seq_along(Contract), function(y) {
obs <- Contract[[y]][all.dates[x]]
if (identical(as.numeric(obs), numeric(0))) # reporting NA
xts(NA, all.dates[x])
else
obs
}
)))
Vol <- xts(MX, order.by=all.dates)
rm(MX) # clean up
结果
> Vol
[,1] [,2] [,3]
2019-01-09 12 NA NA
2019-01-10 11 NA NA
2019-01-11 10 10 NA
2019-01-12 9 9 8
2019-01-13 8 8 7
2019-01-14 7 7 6
2019-01-15 6 6 5
2019-01-16 5 5 4
2019-01-17 4 4 3
2019-01-18 3 3 2
2019-01-19 2 2 1
2019-01-20 1 1 NA
能否请您检查一下这是否是您期望的结果?