如何在R中使用read.table读取文件时直接提取文件名生成新列
无需外部文件名向量实现自动提取文件名作为新列
单个文件的处理方法
直接将文件路径定义为变量,读取时通过basename()提取纯文件名,再用str_extract匹配需要的部分:
library(tidyverse) # 先定义文件路径 file_path <- "[MYPATH]/Mon1_2016-10-06_@exyz66698.txt" # 读取文件并自动生成Rec列 df <- read.table(file_path, comment.char = "", header = FALSE, quote="", sep="\t", stringsAsFactors = F, encoding = "UTF-8") %>% mutate(Rec = str_extract(basename(file_path), ".*\\d"))
basename(file_path)会自动剥离路径前缀,只保留文件名(比如把[MYPATH]/xxx.txt变成xxx.txt),再用你原有的正则.*\\d提取到最后一位数字为止的内容。
批量处理多个文件的方法
如果要读取文件夹下多个同类型文件,每个文件自动对应自己的Rec值,可以用map_df批量处理:
library(tidyverse) # 获取目标文件夹下所有txt文件的完整路径 file_paths <- list.files("[MYPATH]", pattern = "\\.txt$", full.names = TRUE) # 批量读取并为每个文件添加对应的Rec列 df_all <- map_df(file_paths, function(path) { read.table(path, comment.char = "", header = FALSE, quote="", sep="\t", stringsAsFactors = F, encoding = "UTF-8") %>% mutate(Rec = str_extract(basename(path), ".*\\d")) })
这样每个文件的所有行都会带上从自身文件名提取的Rec值,完全不需要提前准备外部文件名向量。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

