web-dev-qa-db-ja.com

bind_rows_(x、.id)のエラー:列を係数から数値に変換できません

xlsxライブラリを使用してExcelファイルから読み取られ、tibblesに保存された10個のデータセットがあります。それらをマージしたいです。

以下にデータセットの例を示します。変数の数はデータセット間で異なり、一部の変数は1つのデータセットにのみ存在します。 person変数の値は重複しません。

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))

通常、実際のデータセットには最大50行と最大200個の変数が含まれています。私が試してみました

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

この結果を得ることを望んで

# 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

しかし、代わりに私はこのエラーを受け取ります

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

Stackoverflowを検索しましたが、これに関する質問を見つけました。ほとんどの回答は、変数を別のクラスに変換しようとすることに集中しています。しかし、私はdo n't careマージされたデータセットをCSVファイルまたはExcelファイルに書き込むだけなので、変数がどのクラスを持っているかはわかりません。

何らかの簡単な回避策はありませんか?

6
asterdroid

私はこれがうまくいくと思う:

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

ファイルは通常小さく(数百行)、2つのファイルを結合して新しいファイルに書き込みたいだけなので、すべての列を文字に変換できると思います。したがって、data1およびdata2は同じタイプになります。

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