如何将R语言lapply遍历生成的各记录合并为最终数据框
解决方案
lapply运行后会返回一个由多个单行列数据框组成的列表,仅需要对这个列表做行合并即可得到统一的Final数据框,以下是两种常用实现方式:
方法1:基础R实现(无需额外安装包)
# 先将lapply的运行结果存储为列表对象 res_list <- lapply(files, function(x) { # 注意:原代码直接将文件名赋值给text会导致提取失败,这里补充读取文件内容的逻辑 text <- paste(readLines(x, warn = FALSE), collapse = " ") policy_nr <- str_extract(text,"(?<=Contract Number \\: )\\d+") if( is.na(policy_nr) ) { policy_nr <- str_extract(text,"(?<=Policy Number \\: )\\d+") } advisor_code <- str_extract(text,"(?<=Advisor Code \\: )\\d+") if( is.na(advisor_code) ) { advisor_code <- str_extract(text,"(?<=Advisor Code: )\\d+") } data.frame(PolicyNumber=policy_nr,AdvisorCode=advisor_code) }) # 合并列表中的所有数据框 Final <- do.call(rbind, res_list)
方法2:tidyverse实现(兼容性更强)
如果已经安装dplyr包,使用bind_rows合并更稳定,不会因为个别数据框列缺失、列顺序不同报错:
library(dplyr) # lapply逻辑和上面一致,直接合并列表即可 Final <- bind_rows(res_list)
补充说明
- 判断NA时不需要写
== TRUE,直接用is.na(变量名)即可,写法更简洁 - 如果你的文本文件有特殊编码,可以在
readLines中添加encoding参数调整读取规则
内容的提问来源于stack exchange,提问作者Chennai Cheetah
相关产品推荐
相关产品推荐

