我有一个来自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,- Interfax mydf$title,- 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...发布于 2011-10-13 15:08:59
尝试使用strsplit,但我注意到您的分隔符实际上是两种不同类型的破折号:
strsplit(mydf$title, split=" [–-] ", useBytes=TRUE)这将为您提供一个元素列表。(如您所见,我无法在我的机器上获得正确的编码,但即便如此,很明显,通讯社始终是每个列表的最后一个元素。然后,您必须处理的唯一另一个问题是,有时源代码也可能包含破折号。如果发生这种情况,您将不得不使用粘贴来组合每个列表中除最后一个元素之外的所有元素。
[[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" 发布于 2011-10-13 15:10:09
也许你把事情搞得过于复杂了:
strsplit(c("before - after", "123 - 456"), " - ", fixed=TRUE)https://stackoverflow.com/questions/7750164
复制相似问题