【问题标题】:Issue in reading mutilple files in R?在 R 中读取多个文件时出现问题?
【发布时间】:2019-03-26 12:58:38
【问题描述】:

我正在尝试读取 1500 个 csv 文件,但出现以下错误。

read.table 中的错误(文件 = 文件,标题 = 标题,sep = sep,quote = quote,: 不允许重复的“row.names”

代码:

fi<-list.files("C:/Users/Desktop/DL/odi_csv_male",full.names=T)
dat<-lapply(fi,read.csv)

但是当单独打开并保存文件时,我可以读取文件。但是由于有 1500 个文件,我需要手动完成。任何帮助将不胜感激?

The file contains                                                                           version 1.3.0                           
    info    team    Ireland                     
    info    team    England                     
    info    gender  male                        
    info    season  2006                        
    info    date    6/13/2006                       
    info    venue   Civil Service Cricket Club, Stormont                        
    info    city    Belfast                     
    info    toss_winner England                     
    info    toss_decision   bat                     
    info    player_of_match ME Trescothick                      
    info    umpire  R Dill                      
    info    umpire  DB Hair                     
    info    match_referee   CH Lloyd                        
    info    winner  England                     
    info    winner_runs 38                      
    ball    1   0.1 England ME Trescothick  EC Joyce    DT Johnston 0   0
    ball    1   0.2 England ME Trescothick  EC Joyce    DT Johnston 0   0
    ball    1   0.3 England ME Trescothick  EC Joyce    DT Johnston 0   4

【问题讨论】:

  • 您的某个文件可能格式错误。 lapply(fi, function(f){print(f);read.csv(f)}) 将在读取每个文件名时将其打印出来。在问题文件中打印的最后一个文件
  • 如何解决?
  • 试试lapply(fi, read.csv, row.names = NULL)
  • 它给出错误文件(文件,“rt”)中的错误:无法打开连接另外:警告消息:在文件(文件,“rt”)中:无法打开文件'1000887.csv' : 没有这样的文件或目录
  • 如果我打开每个文件并将其保存为 csv 然后我就可以阅读它。它很耗时

标签: r


【解决方案1】:

来自data.tablefread 更强大的IMO。

试试

library(data.table)
dat<-lapply(fi,fread)

您的某些文件也可能不是.csv 格式。尝试添加:

fi<-fi[grepl(".csv",fi)]

或者,正如评论的那样,row.names=NULL 选项可以帮助dat&lt;-lapply(fi,function(x) read.csv(x, row.names=NULL))

如果数据是非结构化的,试试fill=T

dat<-lapply(fi,function(x) fread(x, fill=T))

编辑:请注意,在这种情况下,dat 成为list 是正常的(并且建议),因为dat 由许多data.frames 组成。尝试使用[[]] 适当地索引您的列表。 如果您真的不想要列表,您可以使用:

for(i in 1:length(fi)) {
 name <- paste0("dat",i)
 myvar <- data.frame(fread(fi[i], fill=T))
 assign(name,myvar, .GlobalEnv)
}

之后,您将拥有许多名为 dat1、dat2...的数据帧...

编辑:聊天后,问题与文件的绘图和聚合有关,而不是阅读,问题已解决

【讨论】:

  • 没有错误,但它只读取前 20 列,由于数据是非结构化的,我的意思是前 20 行我只有 4 列,而 20 行之后数据有 25 列。
  • 它的工作,但数据被转换成列表。阅读后我正在绘制它。但现在我无法绘制它
  • for(i in 1:length(fi)) { name
  • 这给出了以下错误分配中的错误(data.frame(fread(fi[i], fill = T)), name, .GlobalEnv) : invalid first argument
  • 查看答案现在应该可以工作了,您应该先给出变量名,然后再给出变量本身
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多