如何在R语言中将含不等长元素的列表展开为DataFrame
将不等长元素的列表转换为DataFrame
我需要把一个包含不等长元素的列表转换成指定格式的DataFrame,示例列表如下:
a = c(1:9) b = c(10:14) test_list = list(a, b) print(test_list) #> [[1]] #> [1] 1 2 3 4 5 6 7 8 9 #> #> [[2]] #> [1] 10 11 12 13 14
期望得到的DataFrame结果如下:
desired_result = data.frame(var1 = c(rep(1,9), rep(2,5)), var2 = c(1:14)) print(desired_result) #> var1 var2 #> 1 1 1 #> 2 1 2 #> 3 1 3 #> 4 1 4 #> 5 1 5 #> 6 1 6 #> 7 1 7 #> 8 1 8 #> 9 1 9 #> 10 2 10 #> 11 2 11 #> 12 2 12 #> 13 2 13 #> 14 2 14
解决方案
方法一:基础R实现
通过生成对应长度的组标识,再展开列表元素即可完成转换:
# 生成组编号,每个编号重复对应列表元素的长度 var1 = rep(seq_along(test_list), sapply(test_list, length)) # 展开列表得到数值列 var2 = unlist(test_list) # 构建目标DataFrame result = data.frame(var1, var2) print(result)
方法二:tidyverse工具包实现
借助purrr和tibble可以更简洁地完成转换:
library(tidyverse) result = test_list %>% imap_dfr(~ tibble(var1 = .y, var2 = .x)) print(result)
两种方法均能输出与期望一致的结果,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者geoscience123
相关产品推荐
相关产品推荐

