【问题标题】:Import multiple text file with first row's specific words导入具有第一行特定单词的多个文本文件
【发布时间】:2020-05-29 17:21:38
【问题描述】:

我将以两个文件为例来解释我的问题。
我有多个文本文件,如下所示:

### 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      

由于我跳过了第一行,所以我无法从here 找到的第一行中提取单词。

但如果我没有删除第一行,它会错误地导入。

文本文件显示如下:

### 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

【问题讨论】:

    标签: r import data.table data-manipulation


    【解决方案1】:

    我们可以单独读取第一行并创建一列

    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')
    

    【讨论】:

    • FileNo是具体的文本文件名。例如,FileName_01FileName_02。提取 1 和 2。
    • rbindlist(lapply(file.list, function(x) { : 未使用的参数 (.id = "id")) 中的错误
    • @PeterChen 对不起,是idcol。混用bind_rows
    • 我认为[, FileNo := substr(id, 24, 25)] 没有识别出具体的文件名
    • 已解决。只需将lapply 更改为sapply 并添加参数即可。
    猜你喜欢
    • 2012-06-08
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多