我正在尝试使用R中的read.table()
读取文本文件。R不会读取#
之后的任何内容。但是,文本中有磅符号与注释无关。我想删除不需要的#
符号而不在数据框中添加注释。
幸运的是,我要保留的所有英镑符号都位于每一行的第一个元素中。因此,基本上我需要删除不在行首元素中的所有#
符号。
2018-08-14 00:00:42 102.18.18.2
2018-08-15 00:00:47 223.45.67.8
2018-08-15 00:00:48 026.15.65.0
2018-08-15 00:00:49 924.43.47.0
2018-08-15 00:00:49 122.45.#67.9
我想在第一行保留英镑符号,并在最后一行删除导致数据帧出现问题的英镑符号。
答案 0 :(得分:1)
您可以使用正则表达式中称为捕获组的功能来做到这一点。
只需在支持使用RegEx(例如VS Code)查找文本的编辑器中打开文件即可。
在“查找”框中,输入:(。+)(#)
在替换框中,输入:$ 1
单击全部替换将删除您在文本之间的所有#个字符。
或者,您也可以编写脚本来执行此操作。
答案 1 :(得分:0)
这可能是纯R解决方案:
首先,让您的问题成为完整的MWE(https://stackoverflow.com/help/mcve):
cat(
'#2018-08-14 00:00:42 102.18.18.2',
'2018-08-14 00:00:42 102.18.18.2',
'2018-08-15 00:00:47 223.45.67.8',
'2018-08-15 00:00:48 026.15.65.0',
'2018-08-15 00:00:49 924.43.47.0',
'2018-08-15 00:00:49 122.45.#67.9', sep = '\n', file = 'mytable.txt')
这将在您的工作目录中创建一个文件,我们可以读取该文件。
(x <- readLines('mytable.txt'))
(y <- gsub('(?<!^)#', '', x, perl = TRUE))
read.table(text = y)
## V1 V2 V3
## 1 2018-08-14 00:00:42 102.18.18.2
## 2 2018-08-15 00:00:47 223.45.67.8
## 3 2018-08-15 00:00:48 026.15.65.0
## 4 2018-08-15 00:00:49 924.43.47.0
## 5 2018-08-15 00:00:49 122.45.67.9
我用()
包裹了每一行,因此您可以看到输出。在实际应用中,我不会包含它们。
神奇之处在于gsub('(?<!^)#', '', x, perl = TRUE)
行。它使用(?<!^)#
的负向后搜索(https://www.regular-expressions.info/lookaround.html),可以读取为:
#
(任何磅号)但?
(什么)<
(之前)!
(不是)^
(该行的开头)