繁体   English   中英

如何从 R 中的文本文件中删除行?

[英]How do I delete rows from a text file in R?

我有一个文本文件,其中包含如下所示的数据行项目:

  1. 1~123~JJJ
  2. 2~223~AAA
  3. 3~444~LLL
  4. 4~567~PPP
  5. 5~785~QQ

我想删除包含以下值的行:(我有另一个包含这些值的文本文件需要删除)PPP QQQ

最后:

  1. 1~123~JJJ
  2. 2~223~AAA
  3. 3~444~LLL

我从未使用过 R 并且想知道是否有办法做到这一点。 如果可以在 Python 中以更快的方式完成,请告诉我。 我对选择持开放态度。

您可以使用grep进行 integer 索引

> df[-grep("PPP|QQQ", df$V1), , drop=FALSE]
         V1
1 1~123~JJJ
2 2~223~AAA
3 3~444~LLL

其中df是一个 data.frame:

df <- read.table(text="1~123~JJJ
2~223~AAA
3~444~LLL
4~567~PPP
5~785~QQQ", header=FALSE, stringsAsFactors=FALSE)

我不熟悉 R,但这是我在 python 中的做法

with open("yourfile.txt", "r") as f:
    lines = f.readlines()
with open("yourfile.txt", "w") as f:
    for line in lines:
        if not line.__contains__("string to delete"):
            f.write(line)

编辑:为了与读取另一个包含所有要排除的字符串的文件一起工作,您需要执行以下操作:

with open("to be deleted.txt", "r") as f:
    parts = f.readlines()
with open("yourfile.txt", "r") as f:
    lines = f.readlines()
with open("yourfile.txt", "w") as f:
    for line in lines:
        for part in parts:
            if not part in line:
                f.write(line)

您可以使用readLinesgrepl的组合,然后是writeLines

conn <- file("path/to/input.txt")
lines <- readLines(conn)
close(conn)
lines <- lines[grepl("^(?!.*\\b(?:PPP|QQQ)\\b).*$", lines, perl=TRUE)]

conn <- file("path/to/input.txt", "w")  # assuming you want to write to the same file
writeLines(lines, conn)
close(conn)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM