作者Chihuah (灰色曼哈顿)
看板R_Language
标题[问题] 计算英文字串中 双字元的出现次数
时间Mon Dec 10 13:00:22 2018
[问题类型]:
效能谘询(我想让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://webptt.com/cn.aspx?n=bbs/R_Language/M.1544418029.A.321.html
1F:→ andrew43: 参考看看。结构上也是双层(一个for一个sapply)。 12/10 13:39
3F:→ andrew43: 这应该不算快。10000个字串大概要16秒。 12/10 13:43
5F:→ obarisk: nse的cost蛮大的 12/10 19:16
7F:→ Chihuah: 感谢前面几位前辈的分享 获益良多~ 又学到一些技巧了 12/13 12:26