Deux petites fonctions pour manipuler un tableau de données sous R.
Suppression des valeurs manquantes
na.rm <- function(x, v=NULL)
{
if (!is.data.frame(x)) x <- as.data.frame(x)
# Les variables a traiter sont specifiees ?
if (is.null(v))
v <- names(x)
# Pour chaque variable specifie, suppression des observations si NA
r <- x[complete.cases(x[v]),]
return(r)
}
na.rm
est similaire à na.omit
sauf qu’il est possible de spécifier les variables à prendre en compte.
> df <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z= c("a",NA,"b"))
> df
x y z
1 1 0 a
2 2 10 <NA>
3 3 NA b
> na.omit(df)
x y z
1 1 0 a
> na.rm(df)
x y z
1 1 0 a
> na.rm(df, c("x","y"))
x y z
1 1 0 a
2 2 10 <NA>
> na.rm(df, "z")
x y z
1 1 0 a
3 3 NA b
Suppression des modalités inutilisées d’un facteur
rm.unused.levels <- function(x, v=NULL)
{
if (!is.data.frame(x)) x <- as.data.frame(x)
# Les variables a traiter sont specifiees ?
if (is.null(v))
v <- names(x)
# Pour chaque variable de type facteur, supression des levels inutilisés
for (i in 1:length(x)) {
if (is.factor(x[[i]]) & names(x)[i] %in% v)
x[[i]] <- factor(x[[i]])
}
return(x)
}
Il arrive parfois que l’on ait des facteurs avec des modalités non utilisées, par exemple après importation d’un fichier d’enquête ou après sélection d’un sous-échantillon. rm.unused.levels
permet de ne conserver que les modalités d’un facteur attribuées à au moins une observation.
> df <- data.frame(v1=c("a","b","a","b"),v2=c("x","x","y","y"))
> df$v1 <- factor(df$v1,c("a","b","c"))
> df$v2 <- factor(df$v2,c("x","y","z"))
> str(df)
'data.frame': 4 obs. of 2 variables:
$ v1: Factor w/ 3 levels "a","b","c": 1 2 1 2
$ v2: Factor w/ 3 levels "x","y","z": 1 1 2 2
> str(rm.unused.levels(df))
'data.frame': 4 obs. of 2 variables:
$ v1: Factor w/ 2 levels "a","b": 1 2 1 2
$ v2: Factor w/ 2 levels "x","y": 1 1 2 2
> str(rm.unused.levels(df,"v1"))
'data.frame': 4 obs. of 2 variables:
$ v1: Factor w/ 2 levels "a","b": 1 2 1 2
$ v2: Factor w/ 3 levels "x","y","z": 1 1 2 2