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

R语言将含列表字符向量列的数据框转换为长格式

R数据框按居民列拆分实现宽转长

问题描述

  • 转换目标:将R环境中的楼栋信息数据框从宽格式转换为长格式,拆分依据为residents列存储的居民编号集合,最终输出3行记录,对应数据内全部3位居民
  • 预期输出结构:共3列,分别为Residents(居民编号)、buildingId(楼栋ID)、Region(所属区域);所有记录的buildingId值为50、Region值为Central,居民编号依次为556、155、143
  • 已尝试但未达预期的代码:
Building_Details_Trial_50 %>% tidyr::separate_rows(residents)

问题原因

tidyr::separate_rows()默认会按非字母数字的任意字符拆分字符串,如果你的residents列使用了固定分隔符(比如逗号、分号)且存在多余空格、或者列本身是列表存储的向量类型,默认参数无法正确识别拆分规则,就会输出不符合预期的结果。

可行解决方案

场景1:residents为带固定分隔符的字符串类型

显式指定分隔符参数,同时开启自动类型转换,最后调整列名和列顺序即可:

library(dplyr)
library(tidyr)

# 示例假设residents列值为"556,155,143"这类逗号分隔的字符串,sep参数替换为你数据里实际的分隔符即可
Building_Details_Trial_50 %>%
  separate_rows(residents, sep = ",", convert = TRUE) %>%
  rename(Residents = residents) %>%
  select(Residents, buildingId, Region)

场景2:residents为列表类型存储的数值向量

直接用unnest()展开列表即可,不需要用separate_rows():

library(dplyr)
library(tidyr)

Building_Details_Trial_50 %>%
  unnest(residents) %>%
  rename(Residents = residents) %>%
  select(Residents, buildingId, Region)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:54:28