2014-03-27 41 views
0

我有一個文本文件,我想用R解析下面列出的下列結構。 字段的分隔符是「開始」和「結束」。解析R中的文本文件

START 蘋果 香蕉香蕉 END START 橙色 蘋果 西瓜 END ...

如何R中解析此獲得的分隔符之間的 內容。 我可以在R中使用XML庫來解析它嗎?

+0

另外,數據顯示在一列下去。每個字都是一行。 因此,row1 =「結束」,row2 =「開始」,row3 =「蘋果」... –

+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" 
+0

如果數據在一個列向量中,而不是行向量呢? –

+0

請以可複製的形式提供您參考的輸入示例。 –

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

編輯/添加:

從您的評論,這聽起來像你的數據是一個單列數據幀。如果是這樣的話,你可以做這樣的事情:

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