我想疊加一個data.frames列表,但有時這些列有不同的數據類型。我希望該操作能夠強制使用最低公分母(在我的情況下通常是character
)。不同數據類型的bind_rows
此堆棧發生在package function之內,它接受幾乎任何data.frames列表。它實際上不具備在bind_rows()
之前將ds_a$x
強制給角色的能力。
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
我有一些長遠的計劃,從(紅帽子)數據庫中使用元數據以影響強制,但我希望堆疊操作有一個短期的通用解決方案。
它與'rbind'爲好。我認爲你想要將批量的API調用綁定在一起,所以它們應該都具有相同的名稱。 – Benjamin
我通常會將它們轉換爲這種情況下的因素,但我不確定它會在多大程度上影響速度,如果將每列轉換爲因子列,然後將它們轉換回來。 – Hao