识别rbind进程中有问题的csv文件-错误消息
每隔几个月,我就会收到大约200个csv文件,我将rbind合并到一个数据集中。我在网上找到了下面的脚本,它很好地完成了这项工作识别rbind进程中有问题的csv文件-错误消息,r,R,每隔几个月,我就会收到大约200个csv文件,我将rbind合并到一个数据集中。我在网上找到了下面的脚本,它很好地完成了这项工作 setwd("directory that contains my csv files") filenames <- list.files() dt <- do.call("rbind", lapply(filenames, read.csv, header = TRUE)) 但是,除非文件具有相同的列数和列名,否则脚本将无法工作。最近,我收到的文件中约
setwd("directory that contains my csv files")
filenames <- list.files()
dt <- do.call("rbind", lapply(filenames, read.csv, header = TRUE))
但是,除非文件具有相同的列数和列名,否则脚本将无法工作。最近,我收到的文件中约有10%的列名拼写错误或列数错误
是否有一种方法可以列出不起作用的文件,这样我就可以通知它们的发送者修复它们
您可以通过假设我有以下4个文件来复制该示例。
文件1.csv A B C1 2 34 5 6
文件2.csv A B C4 5 63 2 1
文件3.csvA B D7 8 96 5 4
文件4.csvA B C D E 7 8 9 4 56 5 4 2 3
我希望能够生成一个简单显示
file3.csv flle4.csv您可以在rbind之前重命名data.frames: 试试这个:
filenames <- c("file1.csv", "file2.csv", "file3.csv")
sapply(filenames, read.csv, stringsAsFactors = FALSE, header = FALSE, nrows = 1)
如果列数不相等,它将返回一个列表您的输入使我意识到我需要进一步澄清我的问题。您的建议假定所有提交的文件都具有正确的设置。我已经更新了我的问题,添加了一个场景,显示用户可能会改变字段的顺序。总之,我需要识别错误文件。谢谢你的帮助@TCS你应该处理好这个特殊的案子。但想法是一样的。我编辑我的答案。根据你的建议,我可以想象一个解决方案,但我不知道如何执行它。如果我们假设第一个csv具有正确的字段,那么我想创建具有两个变量的新数据集。第一个简单地提供了csv文件名的列表。第二个是一个二进制变量T/F,它比较第一个文件的名称与其余每个文件的名称,并返回T或F。这样,我可以快速地将重点放在比较结果为F的文件上。感谢您的帮助。
filenames <- c("file1.csv", "file2.csv", "file3.csv")
sapply(filenames, read.csv, stringsAsFactors = FALSE, header = FALSE, nrows = 1)
[,1] [,2] [,3]
V1 "A" "A" "A"
V2 "B" "B" "B"
V3 "C" "C" "D"