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

在R中将数据框内的坐标列表拆分为独立列的方法

解决Twitter推文坐标拆分问题

先修正原preprocess函数的bug

原函数存在两处错误:

  • lapply循环中误用df$text而非m$text,会导致每一行重复绑定整个数据集的文本内容
  • 最终返回的是原始输入df,而非去重后的目标数据框df_u

修正后的函数:

preprocess <- function(df) {
  df_tw <- do.call(rbind, lapply(df, function(m)
    data.frame(text = m$text,
               lang = m$lang,
               geo = m$geo,
               date = m$created_at)))
  df_u <- df_tw %>% distinct(text, .keep_all=TRUE)
  return(df_u)
}

拆分geo.coordinates中的坐标列

方法1:使用tidyverse工具(推荐)

借助purrr的map_dbl提取列表中的坐标值,结合dplyr完成列添加:

library(tidyverse)

# 处理已有的df_mt数据框
df_mt_processed <- df_mt %>%
  mutate(
    # 提取经度(列表第一个元素)
    longitude = map_dbl(geo.coordinates$coordinates, ~ifelse(is.null(.), NA, .[1])),
    # 提取纬度(列表第二个元素)
    latitude = map_dbl(geo.coordinates$coordinates, ~ifelse(is.null(.), NA, .[2]))
  ) %>%
  # 可选:移除原geo.coordinates列,按需保留
  select(-geo.coordinates)

方法2:使用Base R

无需额外安装包,用sapply遍历列表提取坐标:

# 添加经度列
df_mt$longitude <- sapply(df_mt$geo.coordinates$coordinates, function(x) {
  if (is.null(x)) NA else x[1]
})

# 添加纬度列
df_mt$latitude <- sapply(df_mt$geo.coordinates$coordinates, function(x) {
  if (is.null(x)) NA else x[2]
})

# 可选:删除原geo.coordinates列
df_mt$geo.coordinates <- NULL

处理后的数据框会新增longitude和latitude两列,无坐标的行对应值为NA,便于后续分析使用。

内容的提问来源于stack exchange,提问作者MVAC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:15:59