删除每个 .txt 文件的最后一行并在 R 中导入/合并数据

标签 r import merge dataframe

我是 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

最佳答案

您可以使用 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 列(请参阅下面的注释)


另一种方法是使用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")

关于删除每个 .txt 文件的最后一行并在 R 中导入/合并数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216350/

相关文章:

使用 starcluster 在亚马逊 EC2 上进行 R 和 Snow

mysql - 如何将数据从 ASCII (ISO/IEC 8859-1) 导入我的 Rails/PGSQL 数据库?

git - 禁用 Git 重命名检测

r - 对密度曲线下方的区域进行阴影处理,以标记最高密度区间 (HDI)

r - 我需要 'binarize' R中的数据框中的一些数据

jquery - 为什么我在这个具有导入语句的 css 链接上的本地主机上收到 403 错误?

import - 如何仅在需要时导入模块?

python - 将三个列表合并到一个字典中

Git branch checkout 说虽然我的工作目录是干净的,但文件将被覆盖

r - R 中是否存在包含用于过滤子集的当前行的变量?