4.3 综合运用
4.3.1 实现excel函数
以下函数实现,仅仅只是从stringr
包的函数上修改,并且没有完善,没有报错提示等的简陋版本,如果感兴趣的可以尝试利用Rcpp
写出高性能版本的同功能函数。
- left
<- function(str,num){
r_left str_sub(string = str,start = 1,end = num)
}r_left('我是R语言学习者',3)
#> [1] "我是R"
- right
<- function(str,num){
r_right str_sub(string = str,start = str_length(str) - num + 1)
}r_right('我是R语言学习者',3)
#> [1] "学习者"
- mid
<- function(str,start,num){
r_mid str_sub(string = str,start = start,end = start + num -1)
}r_mid('我是R语言学习者',3,3)
#> [1] "R语言"
其余函数可以尝试自行实现。
4.3.2 使用案例
实际运用案例
- 合并
library(data.table)
#>
#> 载入程辑包:'data.table'
#> The following objects are masked from 'package:dplyr':
#>
#> between, first, last
#> The following object is masked from 'package:purrr':
#>
#> transpose
<- data.table(col=rep('a',10),letters=letters[1:10])
dt :=str_c(letters,collapse = '|'),by=.(col)][]
dt[,newcol#> col letters newcol
#> 1: a a a|b|c|d|e|f|g|h|i|j
#> 2: a b a|b|c|d|e|f|g|h|i|j
#> 3: a c a|b|c|d|e|f|g|h|i|j
#> 4: a d a|b|c|d|e|f|g|h|i|j
#> 5: a e a|b|c|d|e|f|g|h|i|j
#> 6: a f a|b|c|d|e|f|g|h|i|j
#> 7: a g a|b|c|d|e|f|g|h|i|j
#> 8: a h a|b|c|d|e|f|g|h|i|j
#> 9: a i a|b|c|d|e|f|g|h|i|j
#> 10: a j a|b|c|d|e|f|g|h|i|j
- 拆解
#工作中路径需要拆解 类似商品品类路径 进口水果-热带水果-生鲜,用户行为路径等
<- data.table(col='a',letters=str_c(letters[1:10],collapse = '|'))
dt
<- function(x){
my_str_split
str_split(x,pattern = "\\|") %>% unlist() #str_split 拆解出来是列表 需要向量化
}
list(newcol=my_str_split(letters)),by=.(col)]
dt[,#> col newcol
#> 1: a a
#> 2: a b
#> 3: a c
#> 4: a d
#> 5: a e
#> 6: a f
#> 7: a g
#> 8: a h
#> 9: a i
#> 10: a j