通过实例来学习R对字符串的处理。
用到的数据集是R自带的USArrests
查看该数据集的前几行

> head(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

获取州的名字的集合

> states = rownames(USArrests);head(states) 
[1] "Alabama"    "Alaska"     "Arizona"    "Arkansas"  
[5] "California" "Colorado"  

统计某些字母出现的次数
使用的R包是stringr,函数是str_count(string, pattern = "")
具体代码如下:

> library(stringr)
> #字母a的个数
> str_count(states,"a")
 [1] 3 2 1 2 2 1 0 2 1 1 2 1 0 2 1 2 0 2 1 2 2 1 1 0 0 2 2 2 1 0 0 0 2
[34] 2 0 2 0 2 1 2 2 0 1 1 0 1 1 1 0 0

函数返回值是对于某个字母在数据集的每个元素中出现的次数,在这里是小写字母a。
看起来使用很简单哎👀
来个有点儿难度的统计元音字母在数据集中的每个元素中的出现次数

> vowels <- c("a","e","i","o","u");vowels #新建一个含有5个元音字母的字符串
[1] "a" "e" "i" "o" "u"

> num_vowels <- vector(mode = "integer",length = 5);num_vowels #设置一个空向量来储存计数结果
[1] 0 0 0 0 0

> for(i in seq_along(vowels)){
+   num_aux <- str_count(tolower(states),vowels[i])
+   num_vowels[i] <- sum(num_aux)
+ } #利用循环来计数,并储存计数结果到空向量num_vowels
> names(num_vowels) <- vowels;num_vowels #对向量num_vowels命名
 a  e  i  o  u 
61 28 44 36  8 

首先搞清楚函数seq_along()的作用是什么。
seq_along(along.with) 参数:along.with take the length from the length of this argument.
观察实例:

> seq_along(vowels)
[1] 1 2 3 4 5
> seq_along(10:20)
 [1]  1  2  3  4  5  6  7  8  9 10 11

由说明文档和实例,我们可以得知,此函数的主要作用就是生成一个从1开始,步长为1,长度和函数输入值的长度相同的向量。

看一下,循环是怎么起作用的

> for(i in seq_along(vowels)){
+   num_aux <- str_count(tolower(states),vowels[i])
+   print(num_aux)
+   num_vowels[i] <- sum(num_aux)
+   print(num_vowels)
+ }
 [1] 4 3 2 3 2 1 0 2 1 1 2 1 0 2 1 2 0 2 1 2 2 1 1 0 0
[26] 2 2 2 1 0 0 0 2 2 0 2 0 2 1 2 2 0 1 1 0 1 1 1 0 0
[1] 61  0  0  0  0
 [1] 0 0 0 0 0 0 1 2 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0
[26] 0 1 1 2 3 2 1 0 0 0 0 1 1 1 0 0 4 1 0 1 0 0 1 0 0
[1] 61 28  0  0  0
 [1] 0 0 1 0 2 0 1 0 1 1 2 1 3 2 1 0 0 2 1 0 0 2 1 4 2
[26] 0 0 0 1 0 1 0 1 0 1 0 0 1 1 1 0 0 0 0 0 3 1 3 2 1
[1] 61 28 44  0  0
 [1] 0 0 1 0 1 3 1 0 1 1 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1
[26] 1 0 0 0 0 1 1 2 2 2 2 2 0 1 2 2 0 0 0 1 0 1 0 1 1
[1] 61 28 44 36  0
 [1] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1
[26] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0
[1] 61 28 44 36  8

显而易见,每一次循环计算特定元音字母在数据集的每个元素中出现的次数,并将其出现次数加和,写入空向量num_vowels中。

参考文献:正则表达式及R字符串处理之终结版(Posted by yphuang on March 15, 2016)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐