bind_rows_(x, .id) 中的错误:无法将列从因子转换为数字
Error in bind_rows_(x, .id) : Column can't be converted from factor to numeric
我使用 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))
实际数据集通常有 ~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
我搜索了 Whosebug,发现了与此相关的问题,大多数答案都集中在尝试将变量转换为另一个 class。但是我 不关心 我的变量有哪些 class,因为我只会将合并的数据集写入 CSV 文件或 Excel 文件。
没有某种简单的解决方法吗?
我认为这应该可行:
library(plyr)
all_data <- rbind.fill(data1,data2)
由于文件通常很小(几百行),你只是想合并两个文件并写入一个新文件,我认为我们可以将所有列转换为字符,因此 [=11 中的公共列=] 和 data2
将具有相同的类型。
library(dplyr)
bind_rows(mutate_all(data1, as.character), mutate_all(data2, as.character))
data1 中的 test1 是 class 因子,而 data2 中是 class 数值。组合因子 class 和数字 class 会导致此问题。解决方案要么将 data1 和 data2 中的 test1 转换为因子,然后使用 all_data <- dplyr::bind_rows(data1,data2)
或
data.table::rbindlist(data1,data2)
我使用 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))
实际数据集通常有 ~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
我搜索了 Whosebug,发现了与此相关的问题,大多数答案都集中在尝试将变量转换为另一个 class。但是我 不关心 我的变量有哪些 class,因为我只会将合并的数据集写入 CSV 文件或 Excel 文件。
没有某种简单的解决方法吗?
我认为这应该可行:
library(plyr)
all_data <- rbind.fill(data1,data2)
由于文件通常很小(几百行),你只是想合并两个文件并写入一个新文件,我认为我们可以将所有列转换为字符,因此 [=11 中的公共列=] 和 data2
将具有相同的类型。
library(dplyr)
bind_rows(mutate_all(data1, as.character), mutate_all(data2, as.character))
data1 中的 test1 是 class 因子,而 data2 中是 class 数值。组合因子 class 和数字 class 会导致此问题。解决方案要么将 data1 和 data2 中的 test1 转换为因子,然后使用 all_data <- dplyr::bind_rows(data1,data2)
或
data.table::rbindlist(data1,data2)