PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
R_Language
[問題] 計算英文字串中 雙字元的出現次數
作者:
Chihuah
(灰色曼哈頓)
2018-12-10 13:00:22
[問題類型]:
效能諮詢(我想讓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 雙字元出現次數
作者:
andrew43
(討厭有好心推文後刪文者)
2018-12-10 13:39:00
參考看看。結構上也是雙層(一個for一個sapply)。主要是靠 gregexpr()
https://ideone.com/AKO8tG
這應該不算快。10000個字串大概要16秒。
作者: x88776544pc (龍飛五丈原)
2018-12-10 14:07:00
先切字串再計數如何
https://ideone.com/0m24lP
作者: obarisk (OSWALT)
2018-12-10 19:16:00
nse的cost蠻大的
作者:
celestialgod
(天)
2018-12-10 23:33:00
https://pastebin.com/Der1EbFy
一萬個大概6秒
作者:
Chihuah
(灰色曼哈頓)
2018-12-13 12:26:00
感謝前面幾位前輩的分享 獲益良多~ 又學到一些技巧了
繼續閱讀
[問題] RSelenium 爬蟲迴圈問題
hhuscout
[問題] R subset問題
AmigoSafin
Re: [問題] Publish R Shiny app失敗
asdfrtg
Re: [問題] 如何對一組觀測值求confidence interval
ksherry
[問題] 如何對一組觀測值求confidence interval
AmigoSafin
Re: [問題] 在變數中找出factor
andrew43
[問題] 在變數中找出factor
AmigoSafin
[問題] 請教為何列印不出結果
shingai
[問題] 讀取xls檔問題
dailylily
[問題] 使用R plot likelihood function
AmigoSafin
Links
booklink
Contact Us: admin [ a t ] ucptt.com