J'ai un gros data.frame appelé "mat" de 49952 obs. de 7597 variables et j'essaie de remplacer les NA par des zéros. Voici et exemple comment mon data.frame ressemble à:Remplacement rapide de NA - une erreur ou un avertissement
A B C E F D Q Z . . .
1 1 1 0 NA NA 0 NA NA
2 0 0 1 NA NA 0 NA NA
3 0 0 0 NA NA 1 NA NA
4 NA NA NA NA NA NA NA NA
5 0 1 0 1 NA 0 NA NA
6 1 1 1 0 NA 0 NA NA
7 0 0 1 0 NA 1 NA NA
.
.
.
J'ai besoin d'un outil vraiment rapide pour les remplacer. Le résultat devrait ressembler à:
A B C E F D Q Z . . .
1 1 1 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0
3 0 0 0 0 0 1 0 0
4 0 0 0 0 0 0 0 0
5 0 1 0 1 0 0 0 0
6 1 1 1 0 0 0 0 0
7 0 0 1 0 0 1 0 0
.
.
.
J'ai déjà essayé lapply(mat, function(x){replace(x, is.na(x),0)})
- n'a pas fonctionné - mat[is.na(mat)] <- 0
- erreur et et peut-être trop lent - et aussi link - ne fonctionnait pas trop.
@Sotos m'a déjà conseillé plyr::rbind.fill(lapply(L, as.data.frame))
mais ça n'a pas marché, parce qu'il fait data.frame des observations 379485344 et 1 variable (qui est 49952x7597) donc je dois aussi trafnsform revenir. Y a-t-il une meilleure façon de faire cela?
La structure réelle de mon data.frame:
> str(mat)
'data.frame': 49952 obs. of 7597 variables:
$ 6794602 : num 1 NA NA NA NA 0 0 0 0 0 ...
$ 1008667 : num NA 1 0 NA NA 0 0 0 0 0 ...
$ 8009082 : num NA 0 1 NA NA NA NA NA NA NA ...
$ 6740421 : num NA NA NA 1 NA 0 0 0 0 0 ...
$ 6777805 : num NA NA NA NA 1 NA NA NA NA NA ...
$ 1001682 : num NA NA NA NA NA 0 0 0 0 0 ...
$ 1001990 : num NA NA NA NA NA 0 0 0 0 0 ...
$ 1002541 : num NA NA NA NA NA 0 0 0 0 0 ...
$ 1002790 : num NA NA NA NA NA 0 0 0 0 0 ...
Note:
quand j'ai essayé mat[is.na(mat)] <- 0
il y avait un avertissement:
> mat[is.na(mat)] <- 0
Warning messages:
1: In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
invalid factor level, NA generated
> nlevels(mat)
[1] 0
data.frame mat après l'utilisation mat[is.na(mat)] <- 0
:
> str(mat)
'data.frame': 49952 obs. of 7597 variables:
$ 6794602 : num 1 0 0 0 0 0 0 0 0 0 ...
$ 1008667 : num 0 1 0 0 0 0 0 0 0 0 ...
$ 8009082 : num 0 0 1 0 0 0 0 0 0 0 ...
$ 6740421 : num 0 0 0 1 0 0 0 0 0 0 ...
$ 6777805 : num 0 0 0 0 1 0 0 0 0 0 ...
$ 1001682 : num 0 0 0 0 0 0 0 0 0 0 ...
$ 1001990 : num 0 0 0 0 0 0 0 0 0 0 ...
$ 1002541 : num 0 0 0 0 0 0 0 0 0 0 ...
$ 1002790 : num 0 0 0 0 0 0 0 0 0 0 ...
Ainsi, les questions sont les suivantes:
- est-il un autre moyen rapide pour remplacer le NA?
- L'avertissement est-il un gros problème? Parce que les données après l'utilisation
mat[is.na(mat)] <- 0
ressemble à ce que je veux, mais il y a trop de valeurs, donc je ne peux pas vérifier si elles vont bien.
'mat [is.na (mat)] = 0' devrait être le moyen le plus rapide, les mains vers le bas (sur les matrices denses). Si ce n'est pas le cas, c'est un bug flagrant dans R ... –
C'est un avertissement pas une erreur, et ça explique bien ce qui se passe, n'est-ce pas? Si vous êtes surpris que les données ont des facteurs, essayez peut-être 'View (mat [sapply (mat, is.factor)])' ou 'str' au lieu de' View'. – Frank
@Frank Bien la question contient la sortie de 'str (mat)' et il n'y a pas de facteurs. Mais le message d'avertissement ne correspond tout simplement pas à cette sortie. –