我有一个文本文件,我想在R中解析,下面列出了以下结构。 字段的分隔符是“START”和“END”。
START 苹果 香蕉 香蕉 结束 开始 橙子 苹果 西瓜 结束 ...
如何在R中解析它以获取 分隔符之间的内容。 我可以使用XML库在R?
中解析它答案 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"