Cela peut être dû à une incompatibilité entre les types de deux produits. data.frames
.
Tout d'abord, vérifiez les types (classes). Faites ceci à des fins de diagnostic :
new2old <- rbind( alltime, all2008 ) # this gives you a warning
old2new <- rbind( all2008, alltime ) # this should be without warning
cbind(
alltime = sapply( alltime, class),
all2008 = sapply( all2008, class),
new2old = sapply( new2old, class),
old2new = sapply( old2new, class)
)
Je m'attends à ce qu'il y ait une rangée qui ressemble à ça :
alltime all2008 new2old old2new
... ... ... ... ...
some_column "factor" "numeric" "factor" "character"
... ... ... ... ...
Si oui, alors l'explication : rbind
ne vérifiez pas les correspondances entre les types. Si vous analysez rbind.data.frame
alors vous pouviez voir que le premier argument initialisait les types de sortie. Si le premier type de data.frame est un facteur, alors la colonne de data.frame de sortie est un facteur avec des niveaux. unique(c(levels(x1),levels(x2)))
. Mais si dans le deuxième cadre de données la colonne n'est pas un facteur alors levels(x2)
es NULL
pour que les niveaux ne s'étendent pas.
Cela signifie que vos données de sortie sont erronées ! Il y a NA
au lieu des valeurs réelles
Je suppose que oui :
- vous avez créé vos anciennes données avec une autre version de R/RODBC et les types ont été créés avec des méthodes différentes (différents paramètres - séparateur décimal peut-être).
- il y a des NULL ou des données spécifiques dans une colonne problématique, par exemple si quelqu'un change la colonne dans la base de données.
Solution :
trouver la colonne erronée et trouver la raison pour laquelle elle est erronée et la réparer. Éliminez la cause et non les symptômes.
6 votes
C'est étrange. Les facteurs ne devraient pas causer cela, en aidant à
rbind
est indiqué : "Les facteurs ont leurs niveaux étendus si nécessaire" (R-2.9.2). Peut-être pourriez-vous vérifier exactement quelle colonne provoque ce problème ?1 votes
Quelle bonne remarque Marek ! Le message d'avertissement m'a fait peur. Après avoir lu votre commentaire, je suis retourné explorer mes données. Toutes les nouvelles données semblent être là et des niveaux supplémentaires ont été ajoutés. À ce stade, je pourrais simplement le laisser comme un avertissement à ignorer - ce qui est une habitude dangereuse à prendre (car il faut alors garder dans sa tête une base de données des avertissements à prendre au sérieux par rapport aux avertissements à ignorer). Comment puis-je déterminer l'origine du message d'avertissement ?
0 votes
"La façon dont R importe les données et détermine automatiquement ce qui est numérique et ce qui ne l'est pas (et en fait ainsi un facteur)..." voir
read.csv(..., stringsAsFactors=FALSE
yoptions(stringsAsFactors=FALSE)
. Il y a beaucoup de questions sur le SO.0 votes
"Attention" signifie un avertissement, pas une erreur. Vous pouvez vérifier si le facteur résultant est correct en utilisant str() ou table(..., useNA='ifany'). Il est préférable de donner un exemple reproductible (vous pourriez en ajouter un en <10 lignes).
0 votes
Question similaire Convertir les colonnes de data.frame de facteurs en caractères