2011-10-13 69 views
1

我有一个废新闻由R类似于下面的提取物名称来源:R和正则表达式:从新闻

> View(mydf$title) 
<name of the news> <dash> <source name>  
Матч КХЛ перенесен на 2 дня - Газета.Ru 
Всероссийская универсиада 2010 - Interfax Russia 
Звезда хоккея снялся в клипе популярного рэпера. ВИДЕО - Ura.ru 
Трактор – Тролейбус 2:1 14.04.2011 – YouTube 

我需要在源的标题新闻和名称拆分mydf$title( - Газета.ru, - 国际文传电讯俄罗斯 - Ura.ru等)
我试试这个library(stringr)

mydf$sourse <- str_extract(mydf$title, '\\- [A-Za-zА-Яа-я0-9." ]{0,}$') 
mydf$sourse <- str_extract(mydf$title, "\\-[:space:[:alpha:][:punct:][:space:]]{0,}$") 
mydf$sourse <- str_extract(mydf$title, '\\-\\s[A-Za-zА-Яа-я0-9[:punct:]\\s]{0,}') 
mydf$sourse <- str_extract(mydf$title, "\\s-\\s[\\w+\\s.]{0,}$") 
mydf$sourse <- str_extract(mydf$title, "\\s-\\s[:alpha:][:print:]$") 

但不能很好地工作。如何优化分割字符串? 感谢您的提示。 Спасибо。

注:mydf是data.frame:

> str(mydf) 
'data.frame': 100 obs. of 6 variables: 
$ title  : Factor w/ 100 levels... 
$ link  : Factor w/ 100 levels... 
$ guid.text : Factor w/ 100 levels... 
$ guid..attrs: Factor w/ 1 level... 
$ pubDate : Factor w/ 100 levels... 
$ description: Factor w/ 100 levels... 
+0

你能否澄清一下'mydf $ title'的结构?它是一个'character's的向量吗?或者它是一个长'character',它有换行符? –

+0

看看str_split_fixed – hadley

+0

谢谢,下面回答。 – user4212

回答

1

尝试使用strsplit,但我注意到,您的隔膜,其实是两种不同类型的仪表板:

strsplit(mydf$title, split=" [–-] ", useBytes=TRUE) 

这会给你一个元素列表。 (正如你所看到的,我无法在我的机器上得到正确的编码,但即便如此,显然通讯社始终是每个列表的最后一个元素,唯一的其他问题是你必须处理的问题然后是,有时源也可以inlude破折号如果发生这种情况,你将不得不使用膏都结合起来,但是各个列表的最后一个元素

[[1]] 
[1] "<U+041C><U+0430><U+0442><U+0447> <U+041A><U+0425><U+041B> <U+043F><U+0435><U+0440><U+0435><U+043D><U+0435><U+0441><U+0435><U+043D> <U+043D><U+0430> 2 <U+0434><U+043D><U+044F>" 
[2] "<U+0413><U+0430><U+0437><U+0435><U+0442><U+0430>.Ru"                               

[[2]] 
[1] "<U+0412><U+0441><U+0435><U+0440><U+043E><U+0441><U+0441><U+0438><U+0439><U+0441><U+043A><U+0430><U+044F> <U+0443><U+043D><U+0438><U+0432><U+0435><U+0440><U+0441><U+0438><U+0430><U+0434><U+0430> 2010" 
[2] "Interfax Russia"                                              

[[3]] 
[1] "<U+0417><U+0432><U+0435><U+0437><U+0434><U+0430> <U+0445><U+043E><U+043A><U+043A><U+0435><U+044F> <U+0441><U+043D><U+044F><U+043B><U+0441><U+044F> <U+0432> <U+043A><U+043B><U+0438><U+043F><U+0435> <U+043F><U+043E><U+043F><U+0443><U+043B><U+044F><U+0440><U+043D><U+043E><U+0433><U+043E> <U+0440><U+044D><U+043F><U+0435><U+0440><U+0430>. <U+0412><U+0418><U+0414><U+0415><U+041E>" 
[2] "Ura.ru"                                                                                             

[[4]] 
[1] "<U+0422><U+0440><U+0430><U+043A><U+0442><U+043E><U+0440>"        
[2] "<U+0422><U+0440><U+043E><U+043B><U+0435><U+0439><U+0431><U+0443><U+0441> 2:1 14.04.2011" 
[3] "YouTube" 
+0

失败:'strsplit错误(mydf $ title,split =“[ - ]”,useBytes = TRUE):非字符参数' – user4212

0

也许你过分复杂的事情:。

strsplit(c("before - after", "123 - 456"), " - ", fixed=TRUE) 
+0

恕我直言,100条线很难在手动模式下搞清楚。 – user4212

+0

我不知道你的意思是什么意思。 –

+0

对不起,但我的英语非常“两位” - 我不明白如何使用您的代码。 – user4212