我在一个dirctory中有几个文件: 我将它们全部列出:
dir1<- list.files ("/data/", "*.txt", full.names = TRUE)
Gh_12_kj.txt
kh_12_k.txt
Gh_13_kj.txt
kh_13_k.txt
我可以像这样逐一阅读:
for (i in seq_along(dir1)) {file =read.table(i) ……}
我想组合所有名称相似但数字不同的文件,例如:
Rbind Gh_12_kj.txt and Gh_13_kj.txt
Rbind s_13_f.txt and s_12_f.txt and so on for all files in this dirctory
我想我们需要unique
但不需要如何
答案 0 :(得分:1)
由于'dir1'对象是使用full.names = TRUE
中的list.files
选项创建的,我们可以使用basename
和file_path_sans_ext
(来自tools
提取文件名}),然后split
'dir1'由'files'的子字符串表示,即只保留'Gh_j_df.txt','kh_13_f_df.txt'中的'Ghkj_df','khf_df'等,循环通过嵌套list
元素与lapply
,然后再次循环并使用fread
读取文件并将它们与rbindlist
一起绑定。
library(data.table)
library(tools)
files <- file_path_sans_ext(basename(dir1))
lapply(split(dir1, sub("^([^_]+)_\\d+_([^.]+)", "\\1\\2", files)),
function(x) rbindlist(lapply(x, fread)))