如何从多层列表的每个子列表提取首条记录构建DataFrame
解决方法
方法1:Base R 简洁实现
用sapply批量提取目标值,再转为DataFrame:
# 提取每个子列表的首条记录 records <- sapply(lst, function(x) x[[1]][1]) # 构建DataFrame df <- data.frame(record = records, stringsAsFactors = FALSE)
方法2:Tidyverse 风格(推荐)
如果习惯用tidyverse工具链,purrr::map_chr可以更直观地完成提取:
library(purrr) df <- data.frame(record = map_chr(lst, ~ .x[[1]][1]), stringsAsFactors = FALSE)
修正你的循环代码
如果坚持用循环,需要先初始化存储向量,再赋值后转DataFrame(原代码错误在于直接给df[i]赋值,相当于逐个添加列而非元素):
# 初始化空向量 records <- character(length(lst)) # 循环提取 for(i in seq_along(lst)) { records[i] <- lst[[i]][[1]][1] } # 转为DataFrame df <- data.frame(record = records)
运行以上任意方法后,df$record都会得到预期结果:"Class A", "Class B", "Class A", "Class D"
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

