187 votes

Remplacer toutes les valeurs 0 par NA

J'ai un cadre de données avec quelques colonnes numériques. Certaines lignes ont une valeur de 0 qui doit être considérée comme nulle dans l'analyse statistique. Quel est le moyen le plus rapide de remplacer toutes les valeurs 0 par NULL dans R ?

13voto

Reilstein Points 423

Parce que quelqu'un a demandé la version Data.Table de ceci, et parce que la solution data.frame donnée ne fonctionne pas avec data.table, je fournis la solution ci-dessous.

En gros, il faut utiliser le := opérateur --> 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

8voto

user5783745 Points 1214

Au cas où quelqu'un arriverait ici via google en cherchant la en face de (c'est-à-dire comment remplacer tous les NA dans un cadre de données par 0), la réponse est la suivante

df[is.na(df)] <- 0

OU

Utilisation de dplyr / tidyverse

library(dplyr)
mtcars %>% replace(is.na(.), 0)

4voto

Alium Britt Points 1126

Vous pouvez remplacer 0 avec NA uniquement dans les champs numériques (c'est-à-dire en excluant des éléments comme les facteurs), mais il fonctionne colonne par colonne :

col[col == 0 & is.numeric(col)] <- NA

Avec une fonction, vous pouvez l'appliquer à l'ensemble de votre cadre de données :

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

Bien que vous puissiez remplacer le 1:5 avec le nombre de colonnes dans votre cadre de données, ou avec 1:ncol(df) .

3voto

BondedDust Points 105234

Eh bien, vous ne pouvez pas remplacer par NULL, mais vous pouvez remplacer par NA. Et je suppose que vous ne voulez pas que des colonnes de caractères ou de facteurs soient testées :

  is.na(dfrm[ , unlist(lapply(dfrm, is.numeric))] ) <- 
                 dfrm[ , unlist(lapply(dfrm, is.numeric))] == 0

1voto

sos_llc Points 71

Si vous êtes comme moi et avez atterri ici en vous demandant comment remplacer TOUTES les valeurs d'un cadre de données par NA, c'est juste :

df[,] <- NA

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X