在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
相关产品推荐
相关产品推荐

