Re: [問題] 字串元素個數計算跟加總?
※ 引述《eco100 ( )》之銘言:
: 不好意思,我又有另一個問題
: 例如我有一個字串 "ABCABACBA"
: 我要計算前後相鄰二個字元出現的次數
: 例如一開始 AB 再來 BC CA AB....
: 可以得到以下結果 AB BC CA BA AC CB
: 2 1 1 2 1 1
: 我想到也是只能用迴圈往後一個字元一個字元移動
: 請問有更快的方式嗎? 感謝!
x <- c("ABACABCB", "CBACABCBACBAB")
cal_func <- function(x, cal_length = 2L){
# 把字串切割成一個個character,丟進function
lapply(strsplit(x, ""), function(ss){
# 計算組數
l <- ceiling(length(ss) / cal_length)
# split的vec
tableVec <- rep(1L:l, each = cal_length, length = length(ss))
out <- do.call(c, lapply(1L:cal_length, function(i){
# 用split的vec切割,然後黏貼在一起
# 每做一次就在前面補一個NA =>
# 第一次分組是 11223344
# 第二次分組是 N1122334 (4沒有成兩組所以不計,N是NA)
# 這段邏輯可以要細想一下~~~
tmp <- split(ss, c(rep(NA_integer_, i - 1L),
head(tableVec, length(tableVec) - i + 1L)))
sapply(tmp[sapply(tmp, length) == cal_length], paste, collapse = "")
}))
return(table(as.vector(out)))
})
}
cal_func(x, 2L)
# [[1]]
#
# AB AC BA BC CA CB
# 2 1 1 1 1 1
#
# [[2]]
#
# AB AC BA BC CA CB
# 2 2 3 1 1 3
cal_func(x, 3L)
# [[1]]
#
# ABA ABC ACA BAC BCB CAB
# 1 1 1 1 1 1
#
# [[2]]
#
# ABC ACA ACB BAB BAC BCB CAB CBA
# 1 1 1 1 2 1 1 3
3以上,你自己驗證看看吧~~
--
R資料整理套件系列文:
magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9
data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue
dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b
tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz
pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.235.90.162
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1490185338.A.2D7.html
→
03/23 09:48, , 1F
03/23 09:48, 1F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章