bind_rows_(x,.id)出错:无法将列从因子转换为数字

ast*_*oid 6 merge r dplyr tibble

我有10个数据集,这些数据集是使用xlsx库从Excel文件中读取的,并存储在tibbles中.我想合并他们.

以下是示例数据集.数据集之间的变量数量不同,而某些变量仅在一个数据集中.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))
Run Code Online (Sandbox Code Playgroud)

实际数据集通常包含约50行和约200个变量.我试过了

    all_data <- dplyr::bind_rows(data1,data2)
Run Code Online (Sandbox Code Playgroud)

希望得到这个结果

# 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
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误

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

我搜索了Stackoverflow,我发现了有关此问题的问题,大多数答案都集中在尝试将变量转换为另一个类.但我不关心我的变量有哪些类,因为我只会将合并的数据集写入CSV文件或Excel文件.

是不是有某种简单的解决方法?

小智 12

我认为这应该有效:

library(plyr)
all_data <- rbind.fill(data1,data2)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,一些 SO 用户喜欢在不解释原因的情况下对答案投反对票。根据我的经验, rbind.fill 有时会给出意想不到的结果(对我来说出乎意料,数据框中会弹出一个错误的数字)。更有经验的 R 用户可能会解释原因。 (3认同)

mt1*_*022 7

因为文件通常是小(几百行),你只是想两个文件合并,并写入到一个新的文件,我想我们都列转换为字符,从而在公共列data1data2将具有相同的类型.

library(dplyr)
bind_rows(mutate_all(data1, as.character), mutate_all(data2, as.character))
Run Code Online (Sandbox Code Playgroud)