我想尝试两件事:
到目前为止,我已尝试将以下内容用于NA值,但已收到警告.
> eg <- data[rowSums(is.na(data)) == 0,]
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error in rowSums(is.na(data)) : 'x' must be an array of at least two dimensions In addition: Warning message: In is.na(data) : is.na() applied to non-(list or vector) of type 'closure'
Jos*_*ich 34
我想我会用我喜欢的方法把帽子扔进戒指:
# sample data
m <- matrix(c(1,2,NA,NaN,1,Inf,-1,1,9,3),5)
# remove all rows with non-finite values
m[!rowSums(!is.finite(m)),]
# replace all non-finite values with 0
m[!is.finite(m)] <- 0
Run Code Online (Sandbox Code Playgroud)
Mat*_*erg 13
library(functional)
m[apply(m, 1, Compose(is.finite, all)),]
Run Code Online (Sandbox Code Playgroud)
示范:
m <- matrix(c(1,2,3,NA,4,5), 3)
m
## [,1] [,2]
## [1,] 1 NA
## [2,] 2 4
## [3,] 3 5
m[apply(m, 1, Compose(is.finite, all)),]
## [,1] [,2]
## [1,] 2 4
## [2,] 3 5
Run Code Online (Sandbox Code Playgroud)
注意: Compose(is.finite, all)相当于function(x) all(is.finite(x))
要将值设置为0,请使用矩阵索引:
m[!is.finite(m)] <- 0
m
## [,1] [,2]
## [1,] 1 0
## [2,] 2 4
## [3,] 3 5
Run Code Online (Sandbox Code Playgroud)
NaRV.omit(x)是问题1的首选选项.助记符NaRV表示"不是常规值".
require(IDPmisc)
m <- matrix(c(1,2,3,NA,5, NaN, 7, 8, 9, Inf, 11, 12, -Inf, 14, 15), 5)
> m
[,1] [,2] [,3]
[1,] 1 NaN 11
[2,] 2 7 12
[3,] 3 8 -Inf
[4,] NA 9 14
[5,] 5 Inf 15
> NaRV.omit(m)
[,1] [,2] [,3]
[1,] 2 7 12
attr(,"na.action")
[1] 1 3 4 5
attr(,"class")
[1] "omit"
Run Code Online (Sandbox Code Playgroud)