Импорт нескольких текстовых файлов с указанием c слов в первой строке - PullRequest
1 голос
/ 14 февраля 2020

Я буду использовать два файла в качестве примера для объяснения моего вопроса.
У меня есть несколько текстовых файлов, как показано ниже:

### First file
GEORGIA file name first row not use  
Col1  Col2  
A     2  
A     4   
A     5  
B     2  
B     6

### Second file  
New York file name first row not use  
Col1  Col2  
C     2  
C     4   
D     5  
E     2  
F     6

Я использую data.table для импорта текстового файла, а затем извлекаю нужную информацию ,

library(data.table)
my_read_data <- function(x){ data <- data.table::fread(x, header = T, strip.white = T, fill = T, skip = 1) }
file.list <- dir(path = "C:/Users/filesnames/", pattern='\\.txt', full.names = T)
dt.list <- sapply(file.list, my_read_data, simplify=FALSE)
cd <- rbindlist(dt.list, idcol = 'id')[, FileNo := substr(id, 24, 25)]

И результат в следующем:

Col1  Col2  FileNo
A     2     1
A     4     1   
A     5     1  
B     2     1  
B     6     1 
C     2     2  
C     4     2     
D     5     2    
E     2     2    
F     6     2  

Однако, что я на самом деле хочу:

Col1  Col2  FileNo   Name
A     2     1        GEORGIA  
A     4     1        GEORGIA     
A     5     1        GEORGIA  
B     2     1        GEORGIA    
B     6     1        GEORGIA   
C     2     2        New York    
C     4     2        New York         
D     5     2        New York        
E     2     2        New York        
F     6     2        New York      

Поскольку я пропускаю первую строку, поэтому я не могу извлечь слова из первого ряда, где я нашел из здесь .

Но если я не удалил первый ряд, он импортирован неправильно.

Текстовый файл показывает как:

### First file
GEORGIA file name first row not use  
Col1,Col2  
A,2  
A,4   
A,5  
B,2  
B,6

### Second file  
New York file name first row not use  
Col1,Col2  
C,2  
C,4   
D,5  
E,2  
F,6

1 Ответ

2 голосов
/ 14 февраля 2020

Мы можем прочитать первую строку отдельно и создать столбец

library(data.table)
rbindlist(lapply(setNames(file.list, file.list), function(x) {
    dat <- fread(x, header = TRUE, strip.white = TRUE, fill = TRUE, skip = 1)
    v1 <- readLines(x, n = 1)
    dat[, Name := sub("\\s+file name.*", "", v1)]
    }), idcol = 'id')
...