将单词拆分为长度组合

时间:2016-08-02 10:01:58

标签: r split tokenize

我在R中寻找一个给定整数的函数,允许我将一个单词拆分成该长度组合但具有滚动效果。

例如function("stackoverflow", 4)会呈现:

c("stac", "tack", "acko", "ckov", "kove", "over", "verf", "rflo", "flow")

你们知道这个功能是否存在,还是我必须创建它?

2 个答案:

答案 0 :(得分:5)

## install.packages("zoo")

x <- unlist(strsplit("stackoverflow",""))
zoo::rollapply(x,width=4,FUN = paste0,collapse="")
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"

一个功能?

foo <- function(input, h) {
  x <- unlist(strsplit(input,""))
  zoo::rollapply(x,width=h,FUN = paste0,collapse="")
  }

foo("stackoverflow", 4)
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"

基准

考虑使用substring()的基本R方法:

foo1 <- function(input, h) substring(input, seq_len(nchar(input)-h+1),h:nchar(input))

让我们生成非常长玩具字符串:

x <- paste0(rep("a",100000), collapse="")

system.time(foo(x,4))
#   user  system elapsed 
#  2.280   0.004   2.288 

system.time(foo1(x,4))
#   user  system elapsed 
# 10.492   0.000  10.509 

所以,看似向量化的函数substring()根本不是 高效,这是一个有趣的观察结果!

答案 1 :(得分:4)

我们可以使用base R

来完成
substring(s,seq_len(nchar(s)-4+1),4:nchar(s))

数据

s <- "stackoverflow"