Проблема с чтением нескольких файлов в R? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь прочитать 1500 CSV-файлов, но получаю следующую ошибку.

Ошибка в read.table (file = file, header = header, 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

1 Ответ

0 голосов
/ 22 октября 2018

fread из data.table является более надежным IMO.

Попробуйте

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

Может также случиться, что некоторые из ваших файлов не в формате .csv.Попробуйте добавить:

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

Или, как прокомментировано, опция row.names=NULL может помочь в dat<-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 ...

РЕДАКТИРОВАТЬ: после чата, проблема была связана с построением и агрегацией файлов, а не с чтением и проблема решена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...