tidyr::unnest() 具有不同的列类型
tidyr::unnest() with different column types
自更新到 tidyr
版本 1.0.0 以来,我在取消嵌套数据帧列表时开始出现错误。
错误的出现是因为列表中的一些数据框包含一列所有 NA 值(逻辑),而其他数据框包含相同的列但有一些字符值(字符)。具有所有 NA 值的列被编码为逻辑列,而其他列被编码为字符向量。
早期版本 tidyr
的默认行为可以毫无问题地处理不同的列类型(至少我在 运行 脚本时没有遇到此错误)。
我可以从内部解决这个问题 tidyr::unest()
吗?
可重现的例子:
library(tidyr)
a <- tibble(
value = rnorm(3),
char_vec = c(NA, "A", NA))
b <- tibble(
value = rnorm(2),
char_vec = c(NA, "B"))
c <- tibble(
value = rnorm(3),
char_vec = c(NA, NA, NA))
tibble(
file = list(a, b, c)) %>%
unnest(cols = c(file))
#> No common type for `..1$file$char_vec` <character> and `..3$file$char_vec`
#> <logical>.
由 reprex package (v0.3.0)
创建于 2019-10-11
您可以在取消嵌套前一步将所有相关列转换为字符。
tibble(
file = list(a, b, c)) %>%
mutate(file = map(file, ~ mutate(.x, char_vec = as.character(char_vec)))) %>%
unnest(cols = c(file))
如果有多个列需要处理,您可以这样做:
tibble(
file = list(a, b, c)) %>%
mutate(file = map(file, ~ mutate_at(.x, vars(starts_with("char")), ~as.character(.))))
后一个例子的数据:
a <- tibble(
value = rnorm(3),
char_vec = c(NA, "A", NA),
char_vec2 = c(NA, NA, NA))
b <- tibble(
value = rnorm(2),
char_vec = c(NA, "B"),
char_vec2 = c("C", "A"))
c <- tibble(
value = rnorm(3),
char_vec = c(NA, NA, NA),
char_vec2 = c("B", NA, "A"))
自更新到 tidyr
版本 1.0.0 以来,我在取消嵌套数据帧列表时开始出现错误。
错误的出现是因为列表中的一些数据框包含一列所有 NA 值(逻辑),而其他数据框包含相同的列但有一些字符值(字符)。具有所有 NA 值的列被编码为逻辑列,而其他列被编码为字符向量。
早期版本 tidyr
的默认行为可以毫无问题地处理不同的列类型(至少我在 运行 脚本时没有遇到此错误)。
我可以从内部解决这个问题 tidyr::unest()
吗?
可重现的例子:
library(tidyr)
a <- tibble(
value = rnorm(3),
char_vec = c(NA, "A", NA))
b <- tibble(
value = rnorm(2),
char_vec = c(NA, "B"))
c <- tibble(
value = rnorm(3),
char_vec = c(NA, NA, NA))
tibble(
file = list(a, b, c)) %>%
unnest(cols = c(file))
#> No common type for `..1$file$char_vec` <character> and `..3$file$char_vec`
#> <logical>.
由 reprex package (v0.3.0)
创建于 2019-10-11您可以在取消嵌套前一步将所有相关列转换为字符。
tibble(
file = list(a, b, c)) %>%
mutate(file = map(file, ~ mutate(.x, char_vec = as.character(char_vec)))) %>%
unnest(cols = c(file))
如果有多个列需要处理,您可以这样做:
tibble(
file = list(a, b, c)) %>%
mutate(file = map(file, ~ mutate_at(.x, vars(starts_with("char")), ~as.character(.))))
后一个例子的数据:
a <- tibble(
value = rnorm(3),
char_vec = c(NA, "A", NA),
char_vec2 = c(NA, NA, NA))
b <- tibble(
value = rnorm(2),
char_vec = c(NA, "B"),
char_vec2 = c("C", "A"))
c <- tibble(
value = rnorm(3),
char_vec = c(NA, NA, NA),
char_vec2 = c("B", NA, "A"))