4.3 综合运用

4.3.1 实现excel函数

以下函数实现,仅仅只是从stringr包的函数上修改,并且没有完善,没有报错提示等的简陋版本,如果感兴趣的可以尝试利用Rcpp写出高性能版本的同功能函数。

  • left
r_left <- function(str,num){
  str_sub(string = str,start = 1,end = num)
}
r_left('我是R语言学习者',3)
#> [1] "我是R"
  • right
r_right <- function(str,num){
  str_sub(string = str,start = str_length(str) - num + 1)
}
r_right('我是R语言学习者',3)
#> [1] "学习者"
  • mid
r_mid <- function(str,start,num){
  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
dt <- data.table(col=rep('a',10),letters=letters[1:10])
dt[,newcol:=str_c(letters,collapse = '|'),by=.(col)][]
#>     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
  • 拆解

#工作中路径需要拆解 类似商品品类路径 进口水果-热带水果-生鲜,用户行为路径等
dt <- data.table(col='a',letters=str_c(letters[1:10],collapse = '|'))

my_str_split <- function(x){
  
  str_split(x,pattern = "\\|") %>% unlist()  #str_split 拆解出来是列表 需要向量化
}

dt[,list(newcol=my_str_split(letters)),by=.(col)]
#>     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