在R中,有没有一种方法可以读取文件,并根据预先确定的ID列表检查唯一ID的第一列,然后只返回这些文件或名称



我有一个文件夹,里面有几千个文件(.csv和.xls(,每个文件的第一列都由唯一的ID号组成。这些文件中的其他字段是我需要提取的关于该唯一ID号的不同数据。问题是,我有一个预先确定的ID号列表,需要为其提取数据。某些文件中可能有也可能没有我预先确定的ID列表中的一个或多个。如何将这些文件中的第一列与我的预定ID列表进行核对,并返回包含我的一个或多个预定ID列表的文件的文件名?

以下内容应该有效:


library(xlsx)
library(readxl) # for read_xls
my_path="C:/Users/Desktop/my_files"
# Collect the names of the files
list_doc_csv=list.files(path = my_path, pattern = ".csv", all.files = TRUE)
list_doc_xlsx=list.files(path = my_path, pattern = ".xlsx", all.files = TRUE)
list_doc_xls=list.files(path = my_path, pattern = ".xls", all.files = TRUE)
# Step needed as .xlsx files were select as having ".xls" patterns
list_doc_xls=list_doc_xls[which(!list_doc_xls%in%list_doc_xlsx)] 
# Declare ID of interest
ID_interesting=c("id1","id33","id101")

list_interesting_doc=c()
# Loop on CSV files and check the content of first column
for (doc in list_doc_csv){
column1=read.csv(file=paste0(my_path,"/",doc))[,1]
if(sum(column1%in%ID_interesting)>0){
list_interesting_doc=c(list_interesting_doc,doc)
}
}
# Loop on .xlsx files
for (doc in list_doc_xlsx){ 
column1=read.xlsx(file=paste0(my_path,"/",doc),sheetIndex = 1)[,1]
if(sum(column1%in%ID_interesting)>0){
list_interesting_doc=c(list_interesting_doc,doc)
}
}
# Loop on .xls files
for (doc in list_doc_xls){ 
column1=unlist(read_xls(path=paste0(my_path, "/", doc))[,1])
if(sum(column1%in%ID_interesting)>0){
list_interesting_doc=c(list_interesting_doc,doc)
}
}
print(list_interesting_doc)

最新更新