如何展平/展开R语言数据框中嵌入的嵌套列表列?
列表列数据框拆分行操作方案
针对存储变长向量的列表列数据框,无需手动切片或编写循环,使用向量化运算即可高效完成行展开,匹配目标输出结构。
方法1:tidyr 简洁实现(推荐)
直接调用unnest()函数完成嵌套列展开,非列表列会自动按对应长度重复匹配:
library(tidyr) df2 <- unnest(df1, cols = C)
运行后输出结果和目标df2结构完全一致。
方法2:R基础包原生实现(无第三方依赖)
如果不想加载外部包,用内置向量化函数即可完成转换:
df2 <- data.frame( A = rep(df1$A, lengths(df1$C)), B = rep(df1$B, lengths(df1$C)), C = unlist(df1$C) )
其中lengths()是R内置的高效函数,可一次性计算列表列每个元素的长度,配合rep()的向量化重复、unlist()的列表扁平化操作,全程为向量化运算,运行效率远高于循环或手动切片方案。
补充:单条语句构造示例df1的方法:定义列表列时用
I()包裹列表对象,告知data.frame()不要对该列做维度拆解即可,代码如下:df1 <- data.frame( A = c("able", "baker", "carr"), B = c("whiskey", "tango", "foxtrot"), C = I(list(14, c(2,18,32), c(10,6))) )
内容的提问来源于stack exchange,提问作者John Posner
相关产品推荐
相关产品推荐

