如何将列表的列表转换为带区域ID的长格式tibble
将嵌套列表转换为带region_id的tibble
原始数据定义
首先确认你的列表数据:
regions <- list(c("AO", "BI", "BW", "DJ", "DZ", "ET", "GH", "GM", "KE", "LS", "MA", "MR", "MW", "MZ", "NG", "SL", "SZ", "TN", "TZ", "UG", "ZA", "ZM", "ZR", "ZW"), c("BD", "CN", "HK", "ID", "IN", "KR", "MU", "MY", "PH", "PK", "SG", "TH", "TW", "VN", "AU", "NZ"), c("AT", "BA", "BE", "BL", "CH", "CI", "CT", "CY", "CZ", "DE", "DK", "EO", "ES", "EU", "FI", "FR", "GA", "GB", "GG", "GR", "HU", "IC", "IE", "IT", "JR", "KZ", "LN", "LU", "LV", "MK", "MT", "NL", "NO", "PO", "PT", "RM", "RS", "RU", "SE", "SJ", "SX", "TR", "UR"), c("AD", "AE", "BH", "DU", "EG", "IQ", "IR", "IS", "JO", "KW", "LB", "OM", "PS", "QA", "SA", "SY", "YE"), c("CA", "KY", "US"), c("AR", "BR", "CB", "CL", "EC", "MX", "PA", "PE", "PY", "UY", "VE"), c("JP"))
方法1:使用tidyverse工具包
imap_dfr可以同时遍历列表元素和对应索引(索引直接作为region_id),自动合并为tibble:
library(tidyverse) region_tibble <- imap_dfr(regions, ~ tibble(country = .x, region_id = .y)) # 查看前几行结果 head(region_tibble)
输出示例:
# A tibble: 6 × 2 country region_id <chr> <int> 1 AO 1 2 BI 1 3 BW 1 4 DJ 1 5 DZ 1 6 ET 1
方法2:基础R实现(无需额外包)
先拆分列表得到所有国家的向量,再生成对应重复次数的region_id向量,最后组合并转为tibble:
# 提取所有国家 country_vec <- unlist(regions) # 生成对应region_id:每个子列表的索引重复对应元素个数次 region_id_vec <- rep(seq_along(regions), sapply(regions, length)) # 组合为数据框并转成tibble region_tibble <- as_tibble(data.frame(country = country_vec, region_id = region_id_vec))
内容的提问来源于stack exchange,提问作者randomwalker
相关产品推荐
相关产品推荐

