bind_rows dans dplyr jeter d'erreur inhabituels

J'espère que je ne suis pas la duplication de certains déjà existants question. Je suis en train de travailler sur une version 32 bits de Win7 machine, R V=3.2.0, dplyr V=0.4.1, RStudio 0.98.1103.

Les fichiers en question sont deux fichiers CSV lire dans le var (x,y /sep = "|", header = TRUE, stringsasFactors = FALSE), qui proviennent de la même table Oracle. La requête utilisée pour produire à la fois des fichiers tiré exactement les mêmes variables (29).

identical(names(x), names(y) > TRUE

Cependant, lorsque je charge le dplyr paquet et essayez d'utiliser 'bind_rows" comme dat <- bind_rows(x, y), je reçois le message d'erreur suivant:

> bind_rows(x,y)
Error: incompatible type (data index: 2, column: 'rmnumber', was collecting: integer (dplyr::Collecter_Impl<13>), incompatible with data of type: factor
In addition: Warning messages:
1: In rbind_all(list(x, ...)) :
  Unequal factor levels: coercing to character
2: In rbind_all(list(x, ...)) :
  Unequal factor levels: coercing to character
3: In rbind_all(list(x, ...)) :
  Unequal factor levels: coercing to character

J'ai regardé la colonne 'rmnumber" et a vérifié que tout dans cette colonne est un numérique comme prévu ou "NA", comme il est également prévu pour les valeurs NULL dans la table. J'ai aussi essayé bind_rows(liste(x,y)) et il a renvoyé la même erreur.

La primitive "rbind" fonctionne très bien sur ces variables sans perte notable de la précision.

Quelqu'un a vu cette erreur? Avez-vous des solutions possibles en dehors de l'utilisation de rbind?

Merci!

#

Je ne pense pas que ce soit utile, mais j'ai construit mon propre dfs et des cours "bind_rows' a fonctionné parfaitement:

> x.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))
> y.df <- data.frame(first_name = c("abc"), last_name = c("def"), rmnum = (1:15), addy = ("some_address"))
> bind_rows(x.df, y.df)
Source: local data frame [30 x 4]

   first_name last_name rmnum         addy
1         abc       def     1 some_address
2         abc       def     2 some_address
3         abc       def     3 some_address
4         abc       def     4 some_address
5         abc       def     5 some_address
6         abc       def     6 some_address
7         abc       def     7 some_address
8         abc       def     8 some_address
9         abc       def     9 some_address
10        abc       def    10 some_address
..        ...       ...   ...          ...

Vérification de la classe de cols

> identical(sapply(x, class), sapply(y, class))
[1] FALSE

> class(x$rmnumber);class(y$rmnumber)
[1] "integer"
[1] "character"

Ce que je ne peut pas comprendre est pourquoi ils sont différents. L'information est apparue hors de l'exact même table et qu'ils ont lu dans des variables en utilisant exactement le même code.

De verrouillage dans la solution

Grand merci à @Pascal pour m'aider à résoudre ce problème. Une simple conversion de type de données résolu mon problème:

    y$rmnumber <- as.integer(y$rmnumber)
> dat2 <- bind_rows(x,y)
> dat2
Source: local data frame [99,884 x 24]
Seriez-vous en mesure de fournir vos données? Sinon, il sera difficile pour les autres de voir ce qui se passe. 🙂
Permettez-moi de voir si je peux trouver un similaire reproductible exemple. Désolé de ne pas y compris.
rbindlist de données.table des poignées de facteurs froid avec de l'inégalité des niveaux et le caractère cols automatiquement... Peut-être la peine de vérifier.
excellent commentaire. Vous devez l'ajouter comme une réponse. C'est une bien meilleure solution pour certaines personnes (comme moi) qui sont aux prises avec une tonne de variables qui sont incompatibles.

OriginalL'auteur Zach | 2015-05-12