【发布时间】:2020-02-08 17:58:14
【问题描述】:
自从更新到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 日创建
【问题讨论】:
-
您仍然可以使用旧的
unnest和tibble(file = list(a, b, c)) %>% unnest_legacy(file) -
或者把这个放在
mutate(file = map(file, ~ mutate(.x, char_vec = as.character(char_vec))))之间 -
unnest <- unnest_legacy之前tibble ... -
感谢 cmets,他们都很有帮助。 @Humpelstielzchen - 你能提交答案吗?我认为你的解决方案是最好的长期解决方案。干杯。