不同数据类型的bind_rows

wib*_*ley 3 r dplyr

我想堆叠一个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)
Run Code Online (Sandbox Code Playgroud)

我希望输出是一个带有单个字符向量的data.frame:

   x
1  1
2  2
3  3
4  4
5  5
6  6
7 z1
8 z2
Run Code Online (Sandbox Code Playgroud)

我有一些长期计划使用来自(REDCap)数据库的元数据来影响强制,但我希望有一个短期的一般解决方案来进行堆叠操作.

akr*_*run 5

我们可以使用rbindlistdata.table

library(data.table)
rbindlist(list(ds_a, ds_b))
#    x
#1:  1
#2:  2
#3:  3
#4:  4
#5:  5
#6:  6
#7: z1
#8: z2
Run Code Online (Sandbox Code Playgroud)