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

