如何用R完成在目录多CSV文件中查找指定字符串序列的程序
完成你的R CSV匹配程序
没问题,我来帮你补全剩下的代码!你已经完成了读取文件列表和加载数据的部分,接下来只需要添加筛选匹配行、合并结果并输出的逻辑就可以了。
完整代码示例
setwd("my_directory") csvFolder <- "csv_directory" flist <- list.files(path = csvFolder) masterCorpus <- data.frame() # 修正参数:full改为full.names,确保获取完整文件路径 allFilesInDirectory <- list.files(csvFolder, full.names=TRUE) allTheData <- lapply(allFilesInDirectory, read.csv, header=TRUE) parentVector <- c("Mother","mother", "Father","father","Adult","adult","MOT","FAT") # 1. 创建匹配正则表达式:把parentVector中的字符串用|连接,实现"任意匹配" match_pattern <- paste(parentVector, collapse = "|") # 2. 遍历每个数据框,筛选出包含匹配字符串的行 # 注意:这里假设你要匹配的是名为`relation`的列,替换成你实际的目标列名即可 filtered_data_list <- lapply(allTheData, function(df) { df[grepl(match_pattern, df$relation, perl = TRUE), ] }) # 3. 合并所有筛选后的结果到masterCorpus masterCorpus <- do.call(rbind, filtered_data_list) # 4. 将结果写入输出CSV文件(row.names=FALSE避免生成额外的行号列) write.csv(masterCorpus, "df.csv", row.names = FALSE)
关键细节说明
- 匹配列的调整:如果你需要检查所有列是否包含目标字符串,而不是特定列,可以把筛选逻辑改成这样:
filtered_data_list <- lapply(allTheData, function(df) { # 检查每一行的任意一列是否存在匹配字符串 row_matches <- apply(df, 1, function(row) any(grepl(match_pattern, row, perl = TRUE))) df[row_matches, ] }) - 简化大小写匹配:你当前的
parentVector包含了大小写两种形式,其实可以用ignore.case=TRUE参数简化,避免重复写大小写字符串:parentVector <- c("Mother", "Father", "Adult", "MOT", "FAT") match_pattern <- paste(parentVector, collapse = "|") # 筛选时添加ignore.case=TRUE,自动忽略大小写匹配 df[grepl(match_pattern, df$relation, perl = TRUE, ignore.case = TRUE), ] - 路径参数修正:你原来代码里的
list.files(csvFolder, full=TRUE)是参数拼写错误,应该改为full.names=TRUE,这个参数用来获取文件的完整路径,确保read.csv能正确找到目标文件。
这样你的程序就能遍历目录下所有CSV文件,筛选出包含parentVector中任意字符串的行,并把结果统一写入df.csv啦!
内容的提问来源于stack exchange,提问作者kevin vivian
相关产品推荐
相关产品推荐

