我想堆叠一个 data.frames 列表,但有时这些列具有不同的数据类型。我希望操作强制到最低公分母(通常character
在我的情况下)。
这种堆叠发生在一个包函数中,该函数接受几乎任何 data.frames 列表。它实际上并没有对ds_a$x
之前的角色进行强制的能力bind_rows()
。
ds_a <- data.frame(
x = 1:6,
stringsAsFactors = FALSE
)
ds_b <- data.frame(
x = c("z1", "z2"),
stringsAsFactors = FALSE
)
# These four implementations throw:
# Error: Can not automatically convert from integer to character in column "x".
ds_1 <- dplyr::bind_rows(ds_a, ds_b)
ds_2 <- dplyr::bind_rows(ds_b, ds_a)
ds_3 <- dplyr::bind_rows(list(ds_a, ds_b))
ds_4 <- dplyr::union_all(ds_a, ds_b)
我希望输出是具有单个字符向量的 data.frame:
x
1 1
2 2
3 3
4 4
5 5
6 6
7 z1
8 z2
我有一些长期计划使用(REDCap)数据库中的元数据来影响强制,但我希望有一个短期的通用解决方案用于堆叠操作。