我已经看到了一个类似问题的多个答案,其中人们在将一个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
答案 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个逗号,因为我认为这将是问题所在。希望能帮助到你!