![文本数据挖掘:基于R语言](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/39130707/b_39130707.jpg)
3.2 字符串的辨识、计数与定位
在3.1节中构造了cn_string这个字符串变量,内容为“上海自来水来自海上,山西煤运车煤运西山”。现在要解决以下3个问题。
●“山”在这个字符串中有没有出现;
●“山”在这个字符串中出现了几次;
●“山”在这个字符串中什么位置出现了。
下面利用stringr包中的函数(str_detect/str_count/str_locate)一一解决上述3个问题。
1.字符串是否出现
判别一个字符或者一段字符在该字符串中是否出现,可以采用str_detect函数实现。返回值是一个逻辑性变量,告诉用户要判别的内容出现了还是没有出现。TRUE表示出现,FALSE表示没出现,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/63_02.jpg?sign=1738882772-JaKHUzLUZcoX2eR9Oqi84mj4qFlo5jcC-0-abce967f1759210d399a169629d1f435)
结果显示,“上海自来水来自海上,山西煤运车煤运西山”中出现了“山”字,没有出现“山东”这个两字词语。
2.字符串出现了几次
使用str_count函数可以直接查看某字符或字符串在目标字符串中出现的次数,以下代码可查看“山”在“上海自来水来自海上,山西煤运车煤运西山”一共出现了几次。结果显示,“山”字共出现了两次。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/63_03.jpg?sign=1738882772-o4BfLDEf3fR0049mNlmZPrktK3If3QeG-0-970d9179aea9c5fce9c2133497a831c4)
如果查看的词在字符串中没有出现,那么就会返回0,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/63_04.jpg?sign=1738882772-745BkRVGqNTouANzB1W8hTRDLFhZ5dOF-0-ba9550b8e4e484c93ae7e37dce61295e)
如果要查询整个字符串的长度,则可以使用str_length函数进行查询。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/64_01.jpg?sign=1738882772-QEnGx5O5yTCB0b33o0yOcaoti0iYYJRB-0-1cccc88c17c3a407135541cbbd6b5821)
3.字符串在何处出现
要知道“山”在“上海自来水来自海上,山西煤运车煤运西山”这个字符串中具体什么位置出现,可以使用str_locate函数。这个函数会对第一个“山”出现的位置进行定位,如下所示。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/64_02.jpg?sign=1738882772-d4dVtQ48PVeIjOOzIuBdIGeyLYbVgQwV-0-35a175de261c70941f08210da504b14f)
以上结果返回了“山”这个字符的起始位置(对于单字来说,起始位置是一样的)。如果想知道“山西”的位置,则可以这样操作。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/64_03.jpg?sign=1738882772-Mj7rsf7NDTWUMAlY2Lk45L4yjXbUVBW1-0-05dc89eba63b20bbf4b2088530773c13)
以上结果表示,“山西”这个词出现在字符串第11到12的位置。事实上“山”在字符串中出现了两次,如果要对两个“山”都进行定位,可以使用str_locate_all函数。
![](https://epubservercos.yuewen.com/CB81A2/20516007901591506/epubprivate/OEBPS/Images/64_04.jpg?sign=1738882772-e2jPEgb7XNXNOO3sP7yzwzKPdzA8zBj8-0-fb89a3d9b3b1f3330eb18e85212d5650)
这里有一点需要注意,返回值是一个列表,而列表中所装的是一个二维数组。了解返回值的数据结构对未来的文本数据批处理具有重要意义。