基于R语言的字符串拼接技术

最近开始学习一些关于R爬虫的知识,遇到各种各样的问题是正常的,用心解决是最重要的,下面我用一个实际栗子来说说关于用R如何将一个长度为n的字符串拼接成一个长度为1的字符串,以豆瓣电影top250神剧《肖申克的救赎》的简介部分为例(悄悄说一句,真的好看,已4刷,那天有空再来一遍~~)。
网页url:https://movie.douban.com/subject/1292052/
其实这个拼接技术应该包括在数据清洗里面,这里依旧用R的rvest包,毕竟是Hadley大大操刀开发的,用膜拜大神的姿势去用这个包,更多关于rvest包的用法请点击这里:点击这里哦~~

正常的爬取姿势是这样的:

library(rvest)
library(xml2)
url <- 'https://movie.douban.com/subject/1292052/'
web <- read_html(url)
abst <- web %>% html_nodes('div.indent span.short span') %>% html_text()

##  清洗 

library(stringr)
a <- str_extract_all(abst,'[^\n| ]+')

来看看结果如何:
基于R语言的字符串拼接技术
姿势没问题,为何出来了一个畸形?我们发现结果是一个列表,对列表操作起来往往是较为繁琐的,反正我个人非常不喜欢列表。这里啰嗦两句关于str_extract()和str_extract_al()l的区别,前者只匹配一次你定义好的规则,后者则匹配多次。
继续来解决上面的问题,为了简单,先把这个列表的内容给他存在b中,不好意思,b也是一个列表,但是可以少用很多中括号索引,这样程序可清爽不少。具体解决方法如下:

##  清洗 

library(stringr)
a <- str_extract_all(abst,'[^\n| ]+')
b <- a[[1]]
wn <- Reduce('paste', b)

关于Reduce()函数的功能及用法,在最后面给出,这里先贴出结果:
基于R语言的字符串拼接技术
这样,就实现了多个字符串的拼接问题。
不知道会不会有人一些疑惑,如:“为什么不用paste()&paste0()函数的?”说到拼接,其实大多数人都会想到这个函数,我已开始也用了这个函数,因为它要把需要拼接的部分一一列出,但是太麻烦了,而且我每次都得去确定上述a列表元素的长度,于是我就想用循环去解决这个问题,然而无果!最后找到了Reduce(),一口老血吐了出来,也太好用了,但是实质还是调用paste()&paste0()函数。下面具体讲讲。
Reduce()函数
Reduce()函数,函数式编程语言中常见的高阶函数,瞬间联想想到apply()函数。
语法:Reduce(f, x, init, right = FALSE, accumulate = FALSE)
参数:主要说说参数f:
a function of the appropriate arity (binary for Reduce, unary for Filter, Find and Position, k-ary for Map if this is called with k arguments). An arbitrary predicate function for Negate.

ok,本来准备要结束了,但是又收到一个提问,顺别写在下面:
继续关于上面的问题,如果不用正则表达式,结果是这样的:
基于R语言的字符串拼接技术
用了正则表达式后:
结果就变成了上面的畸形截图,但是里面的\n就没有了,对,关于正则表达式,上面已经啰嗦过了,这里不再做过多冗余的解释。