Re: [問題] 字串元素個數計算跟加總?

看板R_Language作者 (天)時間8年前 (2017/03/22 20:22), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #1OqcnwBN (R_Language)
文章代碼(AID): #1OqcnwBN (R_Language)