如何在 xts 对象中用 NA 替换 Inf 和 NaN

How to replace Inf and NaN with NA in an xts object

我有一个 xts 对象 (df):

##                  a     b
## 2015-09-14 -0.5470    NA
## 2015-09-15  0.0112    NA
## 2015-09-16  0.0910 0.932
## 2015-09-17    -Inf 0.862
## 2015-09-18     Inf 1.946
## 2015-09-21 -0.7050 2.692
## 2015-09-22     NaN 2.011
## 2015-09-23 -0.5440 1.859
##     .
##     .
##    etc

因为列 a 包括 Inf-InfNaN,我遇到了一些错误。有没有办法用 NA 替换这些值(将 InfNaN 视为缺失值)?

您可以像在普通 matrix

上一样使用 apply

使用您提供的数据:

d <- xts(read.zoo(text='date a     b
2015-09-14 -0.5470    NA
2015-09-15  0.0112    NA
2015-09-16  0.0910 0.932
2015-09-17    -Inf 0.862
2015-09-18     Inf 1.946
2015-09-21 -0.7050 2.692
2015-09-22     NaN 2.011
2015-09-23 -0.5440 1.859', header=T, index=1))

apply(d, 2, function(x) ifelse(is.finite(x), x, NA))

##                  a     b
## 2015-09-14 -0.5470    NA
## 2015-09-15  0.0112    NA
## 2015-09-16  0.0910 0.932
## 2015-09-17      NA 0.862
## 2015-09-18      NA 1.946
## 2015-09-21 -0.7050 2.692
## 2015-09-22      NA 2.011
## 2015-09-23 -0.5440 1.859

另一种方法是通过索引要保留(或删除)的元素来进行替换

d[!is.finite(d)] <- NA