使用tidyverse拆分列表为两列时col参数缺失报错如何解决
报错原因
unnest_wider是tidyr中独立的宽表拆分函数,不是设计给mutate/mutate_at这类逐列变换函数调用的工具。它的第一个参数要求传入操作的数据集,第二个col参数指定要拆分的列表列,你把它嵌套在mutate_at中调用时,传入的第一个参数是centroid列的向量,无法匹配它要求的col参数,因此会持续提示参数缺失。你额外添加的.cols是mutate系列函数的参数,并不会传递给unnest_wider,因此无法解决问题。
正确实现方法
你数据中的centroid是sf标准的空间点列,有两种常用的实现方案:
方案1:使用unnest_wider直接拆分
不需要嵌套mutate_at,直接调用unnest_wider指定要拆分的列即可,可通过names_repair自定义输出列名:
library(tidyverse) library(sf) data %>% unnest_wider(centroid, names_repair = ~c("disasterno", "X", "Y"))
方案2:针对空间点列的适配方案(更推荐)
使用sf包自带的st_coordinates直接提取坐标,搭配mutate生成新列,逻辑更清晰,也可以保留原始的空间列属性:
library(tidyverse) library(sf) data %>% mutate( X = st_coordinates(centroid)[,1], Y = st_coordinates(centroid)[,2] )
两种方案都可以得到包含独立坐标列的结果,你可以根据自己是否需要保留原始centroid空间列选择对应的方案。
内容的提问来源于stack exchange,提问作者me.limes
相关产品推荐
相关产品推荐

