前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >36. R 数据整理(八: stringr 处理字符串数据)

36. R 数据整理(八: stringr 处理字符串数据)

作者头像
北野茶缸子
发布2021-12-17 09:23:20
1.1K0
发布2021-12-17 09:23:20
举报
文章被收录于专栏:北野茶缸子的专栏

作为同属于tidyverse 大家庭的一份子,stringr 也为R 的一般字符串处理,献上了一份自己的力量!

基本用法

查看长度

代码语言:javascript
复制
x <- "The birch canoe slid on the smooth planks."
length(x)
str_length(x)

> length(x)
[1] 1
> str_length(x)
[1] 42

length 只会返回出x 中的元素数(长度为1 的字符串类型的向量)。

str_length 才会返回字符串长度。(其实R 也提供了nchar 的方法)

拆分与组合

拆分

需要注意的是,提取拆分后的元素需要使用 [[]] 双括号选择。

代码语言:javascript
复制
x <- "The birch canoe slid on the smooth planks."
str_split(x," ")
x2 = str_split(x," ")[[1]]
# 此时x2 是一个包含x中所有单词(用空格拆分了)的向量。
> length(x2)
[1] 8

合并

collapse 设定合并向量中内容使用的分隔符。

代码语言:javascript
复制
str_c(x2,collapse = " ")

collapse 参数设定分离的元素结合成一个字符串分离的符号。

还可以将两个向量中的元素,或向量和另外一个字符串进行合并。

代码语言:javascript
复制
str_c(x2,1234,sep = "+")

sep 参数设定某两个分隔的元素连接,使用某符号。、

如果是长度不相等的两个向量合并,则会循环连接(挨个对上,而非全部对上):

代码语言:javascript
复制
> c
 [1]  9 10  1  8  4  5  6  2 12 11  7  3
> b
[1] "a"     "ppple"
> str_c(c,b, sep='+')
 [1] "9+a"      "10+ppple" "1+a"      "8+ppple"  "4+a"      "5+ppple" 
 [7] "6+a"      "2+ppple"  "12+a"     "11+ppple" "7+a"      "3+ppple" 

提取字符串

str_sub(string, start = 1L, end = -1L) ,从start 到end, 为提取的string 中字符在字符串中的位置。(空格也占位!)

代码语言:javascript
复制
x <- "The birch canoe slid on the smooth planks."
str_sub(x,5,9)

大小写转换

upper 大写,lower 大写,title 首字母大写。

代码语言:javascript
复制
str_to_upper(x2)
str_to_lower(x2)
str_to_title(x2)

字符串排序

默认按照英文字母或数字大小顺序。

代码语言:javascript
复制
str_sort(x2)

空白处理

stringr::str_trim(string, side) 返回删去字符型向量 string 每个元素的首尾空格的结果,可以用 side 指定删除首尾空格("both")、开头空格("left")、末尾空格("right")。如:

stringr::str_squish(string) 对字符型向量 string 每个元素,将重复空格变成单个,返回变换后的结果。

高级用法

字符检测

对字符串分隔后的向量与待检测的字符进行比较,生成等长的逻辑值向量。detect 检测全字符,starts 检测首字母,ends 检测末字母。

代码语言:javascript
复制
str_detect(x2,"h")
str_starts(x2,"T")
str_ends(x2,"e")

> str_detect(x2,"h")
[1]  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE

还可以联合 table 统计TRUE 与FALSE 的数目。

代码语言:javascript
复制
> table(str_detect(x2,"h"))

FALSE  TRUE 
    4     4 

另外,也可以联合 sum 获取TRUE 数目, mean 获得TRUE 比例。

代码语言:javascript
复制
> sum(str_detect(x2,"h"))
[1] 4
> mean(str_detect(x2,"h"))
[1] 0.5

提取匹配字符

将向量中符合要求的元素提取为一个新的向量。

代码语言:javascript
复制
> x <- str_subset(x2,"h")
> x
[1] "The"    "birch"  "the"    "smooth"

ps:匹配和检测支持正则:

字符计数

计算字符串内指定字符出现次数。

代码语言:javascript
复制
str_count(x," ")
str_count(x2,"o")

> str_count(x," ")
[1] 7
> str_count(x2,"o")
[1] 0 0 1 0 1 0 2 0

字符替换与删除

replace 会替换字符串中指定的第一个字符。而replace_all 则替换全部符合的字符。

代码语言:javascript
复制
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")

> str_replace(x2,"o","A")
[1] "The"     "birch"   "canAe"   "slid"    "An"      "the"    
[7] "smAoth"  "planks."
> str_replace_all(x2,"o","A")
[1] "The"     "birch"   "canAe"   "slid"    "An"      "the"    
[7] "smAAth"  "planks."
> > str_remove(x2, "[.]")
[1] "The"    "birch"  "canoe"  "slid"   "on"     "the"   
[7] "smooth" "planks"

str_remove 可以将指定的某个字符串从字符串中删除。

练习题

6-2

代码语言:javascript
复制
#练习6-2
library(stringr)
#Bioinformatics is a new subject of genetic data collection,analysis and dissemination to the research community.
tmp <- "Bioinformatics is a new subject of genetic data collection,analysis and dissemination to the research community."
#1.将上面这句话作为一个长字符串,赋值给tmp
#2.拆分为一个由单词组成的向量,赋值给tmp2(注意标点符号)
tmp2 <- tmp %>% 
  str_replace(',', ' ') %>% 
  str_replace('\\.','') %>% 
  str_split(" ") 
# 直接用或连字符, str_split(" |,") 可以省去替换, 操作
tmp2 <- tmp2[[1]]
tmp2
#3.用函数返回这句话中有多少个单词。
length(tmp2)
#4.用函数返回这句话中每个单词由多少个字母组成。
str_length(tmp2)
#5.统计tmp2有多少个单词中含有字母"e"
sum(str_detect(tmp2, "e"))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本用法
    • 查看长度
      • 拆分与组合
        • 拆分
        • 合并
      • 提取字符串
        • 大小写转换
          • 字符串排序
            • 空白处理
            • 高级用法
              • 字符检测
                • 提取匹配字符
                  • 字符计数
                    • 字符替换与删除
                    • 练习题
                      • 6-2
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档