valores una tabla sustituir renglon remove por filas eliminar elementos contar con como r matrix rows na

tabla - Eliminar NA/NaN/Inf en una matriz



remove na in r (4)

Quiero probar dos cosas:

  1. ¿Cómo elimino las filas que contienen NA / NaN / Inf?
  2. ¿Cómo establezco el valor del punto de datos de NA / NaN / Inf a 0?

Hasta ahora, he intentado usar lo siguiente para los valores de NA, pero he estado recibiendo advertencias.

> eg <- data[rowSums(is.na(data)) == 0,]

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''


Creo que voy a lanzar mi sombrero en el anillo con mis métodos preferidos:

# 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


NaRV.omit (x) es mi opción preferida para la pregunta 1. Mnemonic NaRV significa "no es un valor regular".

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"


Solo otra manera (para la primera pregunta):

m <- structure(c(1, 2, 3, NA, 4, 5, Inf, 5, 6, NaN, 7, 8), .Dim = c(4L, 3L)) # [,1] [,2] [,3] # [1,] 1 4 6 # [2,] 2 5 NaN # [3,] 3 Inf 7 # [4,] NA 5 8 m[complete.cases(m * 0), , drop=FALSE] # [,1] [,2] [,3] # [1,] 1 4 6

No puedo pensar en otra cosa que no sea la respuesta de Matthew para la segunda parte.


library(functional) m[apply(m, 1, Compose(is.finite, all)),]

Demostración:

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

Nota: Compose(is.finite, all) es equivalente a la function(x) all(is.finite(x))

Para establecer los valores en 0, use la indexación de matriz:

m[!is.finite(m)] <- 0 m ## [,1] [,2] ## [1,] 1 0 ## [2,] 2 4 ## [3,] 3 5