You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:32:37