使用 readLines() 或 read_lines() 从 txt 文件中删除某些行(带有 ---- 和空行)

Remove certain lines (with ---- and empty lines) from txt file using readLines() or read_lines()

我有这个文本文件 textdata.txt:

TREATMENT DATA

------------------------------------
A: Text1
B: Text2

C: Text3
D: Text4

E: Text5
F: Text6
G: Text7

我想用 --------- 删除整行,使用 readLinesread_lines:[=19= 删除空行]

当我使用 readLines("textdata.txt") 时,我得到:

 [1] "TREATMENT DATA"                      
 [2] ""                                    
 [3] "------------------------------------"
 [4] "A: Text1"                            
 [5] "B: Text2"                            
 [6] ""                                    
 [7] "C: Text3"                            
 [8] "D: Text4"                            
 [9] ""                                    
[10] "E: Text5"                            
[11] "F: Text6"                            
[12] "G: Text7"  

我想要,预期输出

 [1] "TREATMENT DATA"                      
 [2] "A: Text1"                            
 [3] "B: Text2"                                                               
 [4] "C: Text3"                            
 [5] "D: Text4"                                                             
 [6] "E: Text5"                            
 [7] "F: Text6"                            
 [8] "G: Text7"                                                             

背景: 我实际上没有使用 R 处理文件的经验。基本思想是获取一种 .txt 格式,我可以从中将存储在一个文件夹中的多个文本文件加载到一个数据帧中。

1) read.table 如果我们可以假设 - 的唯一出现是在问题中显示的位置并且 ? 确实如此文件中的任何地方都没有出现,那么这将读入关于每一行的数据作为一个字段并丢弃 header。由于 - 是注释字符行,只有 - 被视为空白,这些将被丢弃。这会将文件读入一列数据框,并将 [[1]] returns 该列作为字符向量。如果你想保留 header 省略 header=TRUE.

read.table("myfile", sep = "?", comment.char = "-", header = TRUE)[[1]]

2) grep 另一种可能性是读入文件,然后删除空行或仅包含 - 个字符的行。

grep("^-*$", readLines("myfile"), invert = TRUE, value = TRUE)

3) pipe 我们可以使用过滤器处理输入,然后将其通过管道传输到 R。在 Windows grep 中找到 [=19] =] 如果您安装了 Rtools40 但如果它不在您的路径上,请使用完整路径,或者如果您根本没有安装它,请将 grep 替换为 findstr。如果在 UNIX/Linux 上,转义可能会根据您使用的 shell 而有所不同。

readLines(pipe('grep -v "^-*$" myfile'))