求助:tidyr::unnest()函数仅保留列表中的第一个值
嘿,我之前也踩过这个坑!你说的这个问题,大概率是没搞清楚unnest()和它的兄弟函数的区别——别急,咱们一步步来解决。
首先先把你的示例数据补全,方便咱们测试:
library(tidyr) df <- structure( list( properties.referentie = c("SDE1786673", "SDE1625351", "SDE1636716"), geometry.coordinates = list( c(4.75813599901064, 52.272456042152), c(6.00720800022323, 51.972594042311), c(5.123456, 52.345678) ) ), class = "data.frame", row.names = c(NA, -3L) )
接下来分两种常见需求给你解决方案:
需求1:把每个坐标值拆成单独的行
如果你想让每个向量里的数值各占一行(比如原3行变成6行),那直接用unnest()就可以:
df %>% unnest(geometry.coordinates)
要是之前你只得到了第一个值,大概率是tidyr版本太旧了——旧版unnest的行为和现在不一样,建议你更新到最新版再试试。
需求2:把向量拆成两列(比如经度、纬度分开)
如果你是想把每个向量里的两个值分别放到两列里(比如一列存经度,一列存纬度),那不能用unnest(),得用unnest_wider():
# 默认生成带后缀的列名 df %>% unnest_wider(geometry.coordinates, names_sep = "_") # 自定义列名更清晰 df %>% unnest_wider(geometry.coordinates, names = c("longitude", "latitude"))
这样运行后,你就能得到3行数据,同时新增了命名清晰的经纬度列,完美匹配你的需求!
简单来说:拆行用unnest(),拆列用unnest_wider(),选对函数就不会再只拿到第一个值啦~
内容的提问来源于stack exchange,提问作者Tdebeus
相关产品推荐
相关产品推荐

