【问题标题】:remove last line of each .txt file and import/merge data in R删除每个 .txt 文件的最后一行并在 R 中导入/合并数据
【发布时间】:2015-05-26 19:16:33
【问题描述】:

我是 R 新手,似乎无法理解这一点。我在一个文件夹中有多个 .txt 文件,并且想导入和合并数据。我的问题是每个文本文件的最后一行。我尝试了多种方法,但无法找到解决方案。预先感谢您的任何帮助。如果对以下内容有任何疑问,请告诉我。

文本文件 1

|03/09/2015|Fist Name 1 |Last Name 1|Address 1
|03/09/2015|First Name 2|Last Name 2|Address 2
|2|2|||||||||||

文本文件 2

|03/06/2015|First Name 3|Last Name 3|Address 3
|03/06/2015|First Name 4|Last Name 4|Address 4
|03/06/2015|First Name 5|Last Name 5|Address 5
|3|3|||||||||||

寻找以下结果

V1                   V2                 V3                 V4
03/09/2015      First Name 1          Last Name 1        Address 1
03/09/2015      First Name 2          Last Name 2        Address 2
03/06/2015      First Name 3          Last Name 3        Address 3
03/06/2015      First Name 4          Last Name 4        Address 4
03/06/2015      First Name 5          Last Name 5        Address 5

【问题讨论】:

    标签: r import merge dataframe


    【解决方案1】:

    您可以使用count.fields() 来帮助计算read.table()nrows 的数量。您必须删除第一列,因为它将为空

    files <- c("x1.txt", "x2.txt")
    
    inList <- lapply(files, function(x) {
        read.table(x, nrows = length(count.fields(x))-1, sep = "|")[-1]
    })
    do.call(rbind, inList)
    #           V2           V3          V4        V5
    # 1 03/09/2015 Fist Name 1  Last Name 1 Address 1
    # 2 03/09/2015 First Name 2 Last Name 2 Address 2
    # 3 03/06/2015 First Name 3 Last Name 3 Address 3
    # 4 03/06/2015 First Name 4 Last Name 4 Address 4
    # 5 03/06/2015 First Name 5 Last Name 5 Address 5
    

    你可以添加

    colClasses = c("NULL", "character", "character", "NULL", "character"))
    

    到上面的read.table()调用只选择第2、3和5列(见下面的cmets)


    另一种方法是使用fread()。它使选择列更容易一些。

    library(data.table)
    
    rbindlist(
        lapply(files, function(x) {
            nr <- length(count.fields(x))-1
            suppressWarnings(
                fread(x, nrows = nr, sep = "|", header = FALSE, drop = c(1, 4))
            )
        })
    )
    #            V2           V3        V5
    # 1: 03/09/2015 Fist Name 1  Address 1
    # 2: 03/09/2015 First Name 2 Address 2
    # 3: 03/06/2015 First Name 3 Address 3
    # 4: 03/06/2015 First Name 4 Address 4
    # 5: 03/06/2015 First Name 5 Address 5
    

    注意:这是使用 data.table development version 1.9.5


    x1.txtx2.txt 在哪里

    writeLines("|03/09/2015|Fist Name 1 |Last Name 1|Address 1
    |03/09/2015|First Name 2|Last Name 2|Address 2
    |2|2|||||||||||", "x1.txt")
    
    writeLines("|03/06/2015|First Name 3|Last Name 3|Address 3
    |03/06/2015|First Name 4|Last Name 4|Address 4
    |03/06/2015|First Name 5|Last Name 5|Address 5
    |3|3|||||||||||", "x2.txt")
    

    【讨论】:

    • 谢谢理查德。我认为这应该有效。让我们假设在我的真实数据中,除了删除第一列(就像你做的那样),还有没有办法也删除第四列。再次感谢您!
    • 是的,你可以在read.table()的末尾加上[-1]而不是[-c(1, 4)]
    • @JimmyDeBlasio - 我还添加了另一种可能性 fread()
    • 使用 fread 方法时出现以下错误 ---- fread(x, nrows = nr, sep = "|", header = FALSE, drop = c(1, 4)) 中的错误: 测试标题行格式后定位不正确。 ch='|'
    • 嗯,我不太确定那条消息。当您使用 colClasses 参数运行 read.table() 时,它是否有效?
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2022-01-15
    • 2022-11-16
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多