web-dev-qa-db-fra.com

Erreur dans bind_rows_ (x, .id): la colonne ne peut pas être convertie du facteur en numérique

J'ai dix jeux de données qui ont été lus à partir de fichiers Excel, en utilisant la bibliothèque xlsx, et stockés dans des tibbles. Je veux les fusionner.

Voici des exemples d'ensembles de données. Le nombre de variables diffère entre les ensembles de données et certaines variables ne se trouvent que dans un seul ensemble de données. La valeur de la variable personne ne se chevauchera jamais.

data1 <- tibble(person = c("A","B","C"),
    test1 = as.factor(c(1,4,5)), 
    test2 = c(14,25,10),
    test3 = c(12.5,16.0,4),
    test4 = c(16,23,21),
    test5 = as.factor(c(49,36,52)))

data2 <- tibble(person = c("D","E","F"),
    test1 = c(8,7,2), 
    test3 = c(6.5,12.0,19.5),
    test4 = as.factor(c(15,21,29)),
    test5 = as.factor(c(54,51,36)),
    test6 = c(32,32,29),
    test7 = c(13,11,10))

Les ensembles de données réels contiennent généralement environ 50 lignes et environ 200 variables. j'ai essayé

    all_data <- dplyr::bind_rows(data1,data2)

en espérant obtenir ce résultat

# A tibble: 6 x 8
  person test1 test2 test3 test4 test5 test6 test7
   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1      A     1    14  12.5    16    49    NA    NA
2      B     4    25  16.0    23    36    NA    NA
3      C     5    10   4.0    21    52    NA    NA
4      D     8    NA   6.5    15    54    32    13
5      E     7    NA  12.0    21    51    32    11
6      F     2    NA  19.5    29    36    29    10

mais à la place je reçois cette erreur

Error in bind_rows_(x, .id) : Column `test1` can't be converted from factor to numeric

J'ai recherché Stackoverflow, et j'ai trouvé des questions à ce sujet, et la plupart des réponses se concentrent sur la tentative de convertir les variables dans une autre classe. Mais je ne me soucie pas des classes de mes variables, car je vais simplement écrire l'ensemble de données fusionné dans un fichier CSV ou un fichier Excel.

N'y a-t-il pas une sorte de solution de contournement simple?

6
asterdroid

Je pense que cela devrait fonctionner:

library(plyr)
all_data <- rbind.fill(data1,data2)
3
raquela

Comme le fichier est généralement petit (plusieurs centaines de lignes) et que vous voulez simplement combiner les deux fichiers et écrire dans un nouveau fichier, je pense que nous pouvons convertir toutes les colonnes en caractères, donc les colonnes communes dans data1 et data2 aura le même type.

library(dplyr)
bind_rows(mutate_all(data1, as.character), mutate_all(data2, as.character))
7
mt1022