[問題] 計算英文字串中 雙字元的出現次數

看板R_Language作者 (灰色曼哈頓)時間6年前 (2018/12/10 13:00), 編輯推噓0(007)
留言7則, 5人參與, 6年前最新討論串1/1
[問題類型]: 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我想要統計一個英文字串中,雙字母的出現次數,例如: <input> aabaaa abbacazz input aa ab ac ad ... az ba bb bc ... ca cb cc ... zz aabaaa 3 1 0 0 0 1 0 0 0 0 0 0 abbacazz 0 1 1 0 1 1 1 0 1 0 0 1 輸入資料是一個csv檔,內含一個欄位<input>,每一筆(行)內容即為一個英文字串 輸出資料是新增aa~zz共676個欄位, 每一行的英文字串後,加入雙字母的出現次數,未出現的為0次 下述程式碼是我目前想到的,但是雙迴圈執行mutate(程式第4~10行),過程速度很慢 想請教對於雙字元的統計 是否有更好、執行效率更高的寫法? [程式範例]: 以下圖片為程式碼與註解 https://imgur.com/utlNEB7
以下為程式碼原文 file_csv<- read.csv("test.csv",header=TRUE,sep=",") n <- 1:nrow(file_csv) patt <- NULL for(i in 0:25){ for(j in 0:25){ tmp_2char <- paste(intToChar(97+i),intToChar(97+j),sep="") patt <- c(patt,tmp_2char) file_csv<-mutate(file_csv,!!tmp_2char:=0) } } m <- length(patt) for(x in n){ tmp_input <- tolower(as.character(file_csv$input[x])) file_csv[x,2:(m+1)] <- str_count(tmp_input,patt) } [環境敘述]: R version 3.5.1 (2018-07-02) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) [關鍵字]: mutate str_count 雙字元出現次數 -- 「那女怪,活潑潑,春意無邊;這長老,死丁丁,禪機有在。一個 似軟玉溫香,一個如死灰槁木。」 《西遊記.第五五回》 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.126.132.70 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1544418029.A.321.html

12/10 13:39, 6年前 , 1F
參考看看。結構上也是雙層(一個for一個sapply)。
12/10 13:39, 1F

12/10 13:40, 6年前 , 2F
主要是靠 gregexpr() https://ideone.com/AKO8tG
12/10 13:40, 2F

12/10 13:43, 6年前 , 3F
這應該不算快。10000個字串大概要16秒。
12/10 13:43, 3F

12/10 14:07, 6年前 , 4F
先切字串再計數如何 https://ideone.com/0m24lP
12/10 14:07, 4F

12/10 19:16, 6年前 , 5F
nse的cost蠻大的
12/10 19:16, 5F

12/10 23:33, 6年前 , 6F
https://pastebin.com/Der1EbFy 一萬個大概6秒
12/10 23:33, 6F

12/13 12:26, 6年前 , 7F
感謝前面幾位前輩的分享 獲益良多~ 又學到一些技巧了
12/13 12:26, 7F
文章代碼(AID): #1S3VBjCX (R_Language)
文章代碼(AID): #1S3VBjCX (R_Language)