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 ?
Réponses
Trop de publicités?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
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)
.