Tengo un marco de datos con algunas columnas numéricas. Algunas filas tienen un valor 0 que debe considerarse nulo en el análisis estadístico. ¿Cuál es la forma más rápida de reemplazar todo el valor 0 por NULL en R?Reemplazar todos los 0 valores a NA
Respuesta
Sustitución de 0 a NA:
df[df == 0] <- NA
¿Cuál sería la sintaxis equivalente para un objeto data.table? – dadrivr
Veo que ha obtenido muchos votos, pero no creo que esto cubra adecuadamente los casos extremos de columnas no numéricas con valores de "0" que no se solicitaron para establecerse en
#Sample data
set.seed(1)
dat <- data.frame(x = sample(0:2, 5, TRUE), y = sample(0:2, 5, TRUE))
#-----
x y
1 0 2
2 1 2
3 1 1
4 2 1
5 0 0
#replace zeros with NA
dat[dat==0] <- NA
#-----
x y
1 NA 2
2 1 2
3 1 1
4 2 1
5 NA NA
Una forma alternativa sin la función [<-
:
una trama de datos de muestra dat
(descaradamente copiado de @ respuesta de Chase):
dat
x y
1 0 2
2 1 2
3 1 1
4 2 1
5 0 0
Zeroes se pueden reemplazar por NA
por la función is.na<-
:
is.na(dat) <- !dat
dat
x y
1 NA 2
2 1 2
3 1 1
4 2 1
5 NA NA
Puede reemplazar 0
con NA
sólo en los campos numéricos (es decir, sin incluir cosas como factores), pero funciona sobre una base de la columna por columna:
col[col == 0 & is.numeric(col)] <- NA
Con una función, se puede aplicar esto a su trama de datos entera:
changetoNA <- function(colnum,df) {
col <- df[,colnum]
if (is.numeric(col)) { #edit: verifying column is numeric
col[col == -1 & is.numeric(col)] <- NA
}
return(col)
}
df <- data.frame(sapply(1:5, changetoNA, df))
Aunque se puede reemplazar 1:5
con el número de columnas en su marco de datos, o con 1:ncol(df)
.
No estoy seguro de que esta sea la solución correcta. ¿Qué pasa con las columnas 6 y más? Serán cortados. – userJT
Es por eso que sugerí reemplazar '1: 5' con' 1: ncol (df) 'al final. No quería que la ecuación fuera demasiado compleja o difícil de leer. –
pero, ¿qué pasa si en las columnas 6 y 7? El tipo de datos es char y no debe hacerse ningún reemplazo. En mi problema, necesito reemplazo solo en las columnas 12 a 15, pero el df completo tiene 21 columnas (muchas no deben tocarse en absoluto). – userJT
Déjeme asumir que su data.frame es una mezcla de diferentes tipos de datos y no es necesario modificar todas las columnas.
modificar sólo las columnas 12 a 18 (de un total de 21), acaba de hacer esta
df[, 12:18][df[, 12:18] == 0] <- NA
Debido a que alguien le preguntó por la versión Data.Table de esto, y debido a que la dada hoja.de.datos solución no hace trabajo con data.table, estoy proporcionando la solución a continuación.
Básicamente, utilice el operador :=
->DT[x == 0, x := NA]
library("data.table")
status = as.data.table(occupationalStatus)
head(status, 10)
origin destination N
1: 1 1 50
2: 2 1 16
3: 3 1 12
4: 4 1 11
5: 5 1 2
6: 6 1 12
7: 7 1 0
8: 8 1 0
9: 1 2 19
10: 2 2 40
status[N == 0, N := NA]
head(status, 10)
origin destination N
1: 1 1 50
2: 2 1 16
3: 3 1 12
4: 4 1 11
5: 5 1 2
6: 6 1 12
7: 7 1 NA
8: 8 1 NA
9: 1 2 19
10: 2 2 40
O 'para (j en nombres (DT)); set (DT, que (DT [[j]] == 0), j, NA) '. Consulte [aquí] (http://stackoverflow.com/a/7249454/4241780) para obtener una explicación más detallada sobre el uso de data.table para buscar y reemplazar valores. – JWilliman
intento por debajo
df [is.na (df)] < - 0
Esto está al revés: la pregunta es cómo reemplazar 0 con NA, no NA con 0. – Gregor
- 1. Reemplazar los valores de NA por fila significa
- 2. Reemplazar todos los valores en una matriz <0.1 con 0
- 3. Reemplazo de 0 con NA en tablas
- 4. ¿Cómo reemplazar los valores en blanco (nulos) con 0 para todos los registros?
- 5. Establecer NA a 0 en R
- 6. Buscar columnas con todos los valores faltantes
- 7. ¿Rellena NA en un vector utilizando valores previos no NA?
- 8. pandas MovingOLS no es compatible con los valores de NA?
- 9. Manejando los valores de NA en aplicar y único
- 10. La función R prcomp falla con los valores de NA, aunque se permiten NA
- 11. Cómo reemplazar valores (nulos) con salida 0 en PIVOT
- 12. ¿Cómo puedo reemplazar {0} pero no {{0}}?
- 13. Inserte los valores de NA en el marco de datos
- 14. Crear una función para reemplazar NA de un data.frame con valores de otro
- 15. Encontrar valores comunes a todos los elementos
- 16. reemplazar los valores nulos en pivote sql
- 17. agrupamiento con valores NA en R
- 18. Reemplazar valores de caracteres con NA en un marco de datos
- 19. Reemplazar nulo con 0 en MySQL
- 20. Función matemática para redondear los valores a .0 o .5
- 21. rgb valores a 0 a 1 escala
- 22. Reemplazar todos los campos en MySQL
- 23. Reemplazar todos los demás a continuación, primera aparición en PHP
- 24. javascript reemplazar selección todos los navegadores
- 25. Reemplazar todos los puntos en un número
- 26. Reemplazar todos los elementos en Knockout.js observableArray
- 27. todos los valores de SuppressWarnings?
- 28. Comprobación de todos los valores de matriz a la vez
- 29. Flex: reemplazar todos los espacios con comas
- 30. 2D Array. Establecer todos los valores a valor específico
No creo que usted quiere/puede reemplazar con valores NULL, pero NA cumple ese propósito en R lingo. – Chase