解析R中的文本文件

时间:2014-03-27 00:32:32

标签: r parsing

我有一个文本文件,我想在R中解析,下面列出了以下结构。 字段的分隔符是“START”和“END”。

START 苹果 香蕉 香蕉 结束 开始 橙子 苹果 西瓜 结束 ...

如何在R中解析它以获取 分隔符之间的内容。 我可以使用XML库在R?

中解析它

4 个答案:

答案 0 :(得分:2)

试试这个:

x <- "START apple banana banana END START orange apple watermelon END ..."

library(gsubfn)
strapplyc(x, "START (.*?) END", simplify = c)

,并提供:

[1] "apple banana banana"     "orange apple watermelon"

答案 1 :(得分:2)

您可以使用strsplit

> x <- "START apple banana banana END START orange apple watermelon END"
> z <- unlist(strsplit(x, "((START)|(END))|(END START)"))
> z[nzchar(z)]
[1] " apple banana banana "     " orange apple watermelon "

如果您不需要将字符串分隔为子字符串,也可以使用gsub

> gsub("START|END", "", x)
[1] " apple banana banana   orange apple watermelon " 

如果您希望将所有剩余的单词分开,则两者的组合将起作用:

> unlist(strsplit(gsub("START | END", "", x), " "))
[1] "apple"      "banana"     "banana" 
[4] "orange"     "apple"      "watermelon" 

EDIT / ADD:

从您的评论中,听起来您的数据是单列数据框。如果是这样的话,你可以这样做:

## set up the data
> d <- data.frame(words = unlist(strsplit(x, " ")))
> d$words <- as.character(d$words)
> d
        words
1       START
2       apple
3      banana
4      banana
5         END
6       START
7      orange
8       apple
9  watermelon
10        END

## remove unwanted words by subsetting
> d[-with(d, which(words == "START" | words == "END")), ]
[1] "apple"      "banana"     "banana"     "orange"     "apple"      "watermelon"

答案 2 :(得分:0)

只是一条线吗?如果您只想使用基数R,请尝试

line <- readLines("filename")[[1]]
data <- strsplit(line, " END START ")[[1]]
data[c(1, length(data))] <- gsub("^START | END$", "",  data[c(1, length(data))])

答案 3 :(得分:0)

这是一种方法:

x <- "START apple banana banana END START orange apple watermelon END"

library(qdap)
genXtract(x, "START\\s", "\\sEND")

##     "apple banana banana" "orange apple watermelon"