在R中找到一行中的单词

时间:2012-09-27 19:54:45

标签: r file-io line

我在R中读过.txt文件,文本由制表符和\ n分隔。我想要的是找到我可以找到单词“Delimiter1”的行号,并提取该信息直到“Delimiter2”。 这里的问题是这个词的格式是:

    \tab \tab \n
    Delimiter1 from data\tab\tab\n
    \tab\tab\data1 \tab data2 \n
    \tab\tab\data2  \tab data2 \n
    .....
    Delimiter2 from data\tab\tab\n
     ......

我尝试了pmatch(),但根本没有运气。这是架构的草稿:

    fileName="text_all.txt"
    conn=file(fileName,open="r")
    line=readLines(conn)
    tabd<-strsplit(line,"\t")

由于

2 个答案:

答案 0 :(得分:3)

正如nograpes已经建议的那样,你可以按照这些方式使用代码:

line[grep("Delimiter1", line, fixed = TRUE):grep("Delimiter2", line, fixed = TRUE)]

每个grep都应该返回包含命名分隔符的行的索引。 fixed参数确保您不必担心分隔符字符串中的特殊正则表达式语法。如果多次找到任一字符串,代码将会中断。

答案 1 :(得分:1)

如果您的分隔符是唯一的(看起来像),您可以使用例如这个功能:

#' Text between delimiters
#' @param x character vector
#' @param tag1 start delimiter
#' @param tag2 stop delimiter
#' @return character vector
lines.between.tags <- function(x, tag1, tag2)
    x[do.call(seq, as.list(grep(paste(tag1, tag2, sep = '|'), x)))]

简单示例:

> text <- c('foo', 'Delimiter1 from data \t \n', 1:5, 'Delimiter2 from data \t \n', 'bar')
> lines.between.tags(text, 'Delimiter1', 'Delimiter2')
[1] "Delimiter1 from data \t \n" "1"                         
[3] "2"                          "3"                         
[5] "4"                          "5"                         
[7] "Delimiter2 from data \t \n"