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

R语言如何拆分存储向量的列并基于结果构建新数据框

R数据框按站点列拆分长表实现方案

核心逻辑:先把sites列存储的站点信息从字符串格式解析为独立的站点值,再按单个站点拆分为单行,保留每行对应的area、population字段即可,以下提供两种常用实现方式。


方法1:tidyverse 方案(代码简洁,推荐日常使用)

优先用纯字符串处理的安全写法,无需解析R表达式,适配你给出的固定格式数据:

library(tidyverse)

df <- data %>%
  # 去除c()外壳,按逗号拆分出单个站点
  mutate(site = str_remove_all(sites, "^c\\(|\\)$") %>% str_split(", ")) %>%
  # 把列表格式的站点列拆为单行
  unnest_longer(site) %>%
  # 调整列名和顺序匹配目标输出
  select(site, Area = area, population)

如果你的站点存储格式完全是标准R向量字符串,也可以用解析表达式的写法,处理大样本时效率更高:

df <- data %>%
  mutate(site = map(sites, ~ eval(parse(text = .x)))) %>%
  unnest_longer(site) %>%
  select(site, Area = area, population)

方法2:基础R方案(无需安装第三方包)

# 逐行处理生成单站点数据块
result_ls <- lapply(seq_len(nrow(data)), function(i) {
  # 解析当前行的站点向量
  site_v <- eval(parse(text = data$sites[i]))
  # 生成对应的数据行
  data.frame(
    site = site_v,
    Area = data$area[i],
    population = data$population[i]
  )
})
# 合并所有数据块得到最终结果
df <- do.call(rbind, result_ls)

说明

你提到单条记录内不存在重复站点,以上代码不需要额外做去重处理,运行后得到的结果和你给出的目标数据框结构、数值完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:24:10