如何将多个csv文件导入R而不会出现重复的行名错误

时间:2016-12-19 21:16:30

标签: r csv

我已经看到了一个类似问题的多个答案,其中人们在将一个csv文件导入R时出现duplicate 'row.names' are not allowed错误,但我还没有看到一个问题,问题是你何时尝试将多个csv文件导入一个数据框。基本上,我试图从同一目录导入104个文件,然后得到duplicate 'row.names' are not allowed。如果我只导入一个文件,因为代码非常简单,我能够解决问题,但是当涉及多个文件时,我很难。我已经尝试了许多不同的方法来正确导入数据,这里有几个:

setwd("path")
loaddata <- function(file ="directory") { 
files <- dir("directory", pattern = '\\.csv', full.names = TRUE)
tables <- lapply(files, read.csv)
dplyr::bind_rows
}
data <- loaddata("PhaseReports")

错误:

  

read.table出错(file = file,header = header,sep = sep,quote =   引用,重复&#39; row.names&#39;不允许

另一次尝试:

path <- "path"
files <- list.files(path=path, pattern="*.csv")
for(file in files)
{
perpos <- which(strsplit(file, "")[[1]]==".")
assign(
gsub(" ","",substr(file, 1, perpos-1)), 
read.csv(paste(path,file,sep="")))
} 

错误:

  

read.table出错(file = file,header = header,sep = sep,quote =   引用,重复&#39; row.names&#39;不允许

编辑:对于第二种方法,当我尝试read.csv(paste(path,file,sep=""), row.names=NULL))时,它会将我的第一列的标题更改为row.names,并将数据向右移动一列。我试过把

colnames(rec) <- c(colnames(rec)[-1],"x") rec$x <- NULL

在最后一行,我收到此错误:

Error in `colnames<-`(`*tmp*`, value = "x") : 
attempt to set 'colnames' on an object with less than two dimensions

如果有一种更简单的方法可以将多个csv文件导入R,而且我对复杂的事情并不害怕让我知道。

我知道这是两个问题的组合,这些问题在堆栈上已经被多次回答,我没有看到是否有人问过这个具体问题。提前谢谢!

编辑2:

所有单个文件都包含以下数据:

Half,Play,Type,Time
1,1,Start,00:00:0`
1,2,,0:23:5
1,3,pass,00:03:76
2,4,start,00:04:76
2,5,pass,00:06:92
2,6,end,00:08:00 

1 个答案:

答案 0 :(得分:1)

虽然这可能无法解决您的问题,但您可以尝试在阅读文件时跳过标题,然后再将其放入。所以像(在你的一些方法中):

read.csv("Your files/file/paste", header = F, skip = 1)

这将跳过标题,希望有助于重复的行名称。完成此代码的完整代码可能是:

my_files <- dir("Your path/folder etc", pattern = '\\.csv', full.names = TRUE)
result <- do.call(rbind, lapply(my_files, read.csv, header = F, skip = 1))
names(result) <- c("Half","Play","Type","Time")

您可以稍后放置标题(名称(结果)行执行此操作)。 如果你还有问题,我建议你创建一个这样的循环:

for (i in my_files){
        print(i)
        read.csv(i)

}

然后看看在收到错误之前打印的最后一个文件名是什么。这个应该是您应该调查的那个。您可以查看一行是否有超过3个逗号,因为我认为这将是问题所在。希望能帮助到你!