6

我正在使用readLines. 第一个“列”是我不需要的复杂文本。接下来的列包含我确实需要的数据。第一个“列”和数据用冒号 (:) 分隔。我希望在第一个冒号处拆分每一行并删除生成的文本字符串,只保留数据。

下面是一个示例数据文件。一种潜在的并发症是一行数据包含多个冒号。那条线可能会在某个时候成为我的标题。所以,我可能不应该在每个冒号处拆分,只在第一个冒号处拆分。

my.data <- "first string of text..:  aa : bb : cc 
            next string ........  :   2    0    2
            third string......1990:   7    6    5
            last string           :   4    2    3"

my.data2 <- readLines(textConnection(my.data))
my.data2

我已经尝试过这里提供的代码:

拆分字符串中的第一个逗号

和这里:

R:从字符串中删除最后三个点

上面第一个链接的代码似乎只在第一行的第一个冒号处拆分。第二个链接上的代码可能会做我想要的,但是到目前为止我无法成功修改它太复杂了。

这是我希望获得的数据,此时我可以使用一个非常简单的gsub语句将第一行中剩余的冒号简单地替换为空格:

   aa : bb : cc 
    2    0    2
    7    6    5
    4    2    3

抱歉,如果这是我没有找到的帖子的副本,并感谢您的任何建议或帮助。

4

1 回答 1

15

以下将从字符串的开头开始,然后抓取所有内容,包括第一个冒号和任何其他空格,并将其替换为空(基本上只是删除它)

gsub("^[^:]+:\\s*", "", my.data2)

如果你不想删除你可以做的空格

gsub("^[^:]+:", "", my.data2)

有关原始正则表达式在做什么的一些说明。从头开始:

^这表示只在字符串的开头找到匹配项

[^:]这表示任何不是冒号的字符

+这表示匹配前面的字符一次或多次(因此匹配尽可能多的非冒号字符)

:这实际上与冒号匹配

\\s这匹配一个空格

*这表示匹配前面的字符零次或多次(因此我们删除冒号后的任何额外空格)

所以把它们放在一起,我们从字符串的开头开始,然后匹配尽可能多的非冒号字符,然后抓住第一个冒号字符和任何额外的空格,并将所有这些都替换为空(基本上删除了我们没有的所有垃圾)不想要)。

于 2012-09-02T05:19:17.407 回答