【发布时间】:2019-01-24 16:50:40
【问题描述】:
我正在将许多源文件中的数据读取到嵌套数据框中。某些列的数据类型不兼容,这会阻止 tidyr::unnest() 函数工作。
例如这里是一个基于iris数据集的嵌套数据框:
irisnested <- iris %>%
rename_all(tolower) %>%
group_by(species) %>%
nest()
为了重现我的问题,我在嵌套数据框的data 列表列中更改了其中一个子数据框中的列类型:
irisnested$data[[2]]$sepal.length <- as.character(irisnested$data[[2]]$sepal.length)
现在数据框不能再取消嵌套了:
irisnested %>%
unnest(data)
# Error in bind_rows_(x, .id) : Column `sepal.length` can't be converted from numeric to character
为了更正每个嵌套数据框中的列类型,我使用了一个匿名函数:
irisnested %>%
mutate(data = map(data,
function(dtf){
dtf$sepal.length = as.numeric(dtf$sepal.length)
return(dtf)
})) %>%
unnest(data)
现在可以再次取消嵌套数据框。但是这个匿名函数看起来很复杂,我直觉肯定有另一种方法可以做到。是否有更好的方法来执行此修改,例如使用modify_at?
【问题讨论】: