3

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")

ありがとう

4

2 に答える 2

3

nograpes が既に提案したように、次の行に沿ってコードを使用できます。

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

それぞれgrepが、指定された区切り文字を含む行のインデックスを返す必要があります。このfixedパラメーターにより、区切り文字列の特殊な正規表現構文について心配する必要がなくなります。いずれかの文字列が複数回見つかった場合、コードは壊れます。

于 2012-09-27T21:34:30.207 に答える
2

デリミタが一意である場合 (そのように思われます)、たとえば次の関数を使用できます。

#' 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"
于 2012-09-27T23:14:34.120 に答える