[問題] 有點小複雜的字串計數

作者: eco100 ( )   2017-06-28 23:55:37
我問題是這樣的
我有如下的字串 基本上是 A B C D E F G 這七個字母的組合
白色的字體不是我想要計數的範圍 所以不管是x或這七個字母 都不重要
黃色字體 才是我想要計數的長度 也就是每組字串的後面七個
位置是指字串的位置 原諒我10後面數字會黏一塊 我就不打了
長度指的就是字串的長度
位置
長度 1 2 3 4 5 6 7 8 9 ....... 29
9 B A G F F A B F C
9 B A G F F A B F C
13 x x x F A A B C C G B B F
13 x x x F A A B F C G F B F
15 x x x x G B B F C G F E E B A
15 x x x x G B B F G G F E E B A
25 x x x x x x x x x x x x E E B A C A E E G F G A A
29 x x x x x x x x x x x x x x x x x x G F G F A A C D A B G
29 x x x x x x x x x x x x x x x x x x G F G F A C C D A B G
相同的長度為一組字串 我想要計算同一組的計數
例如長度9的 我想要得到如下的結果:
-1 ~ -7 表示從後面倒數過來的位置
-7 -6 -5 -4 -3 -2 -1
A 1
B 1/2
C 1/3
D
E
F 1 1 1
G 1
原則就是同一組長度 重覆出現的字母 算一次就好
所以長度9雖然有兩條字串 在-7這位置都是G 但是G只要算一次
另一個重點就是那個1/2的算法,
因為B這個字母除了是長度9的-3這位置外
同時也是長度13這組 -7 的位置
所以B的次算 要分給兩組 各為0.5次 其他沒出現的就為0
以此類推 我再列一下長度15會有的結果:
-7 -6 -5 -4 -3 -2 -1
A 1
B 1
C 1/3
D
E 1 1
F 1
G 1 1/2
C這個字母同時出現在長度9、長度13、長度15 所以次數是1/3
分別是長度9的-1 長度13的-5 長度15的-7
所以我其實就是想要每一組長度字串的這個計數結果
這樣舉例不知是否清楚 @@
我想了一天 還是不知道有什麼具體的寫法
謝謝各位指教
作者: x88776544pc (龍飛五丈原)   2017-06-29 00:22:00
如果把資料補齊成 k x 29 的矩陣,用 length 跟 data[,i] 作成的 table 就可以看出第 i 行下某類在不同長度下出現的次數
作者: clsmbstu   2017-06-29 00:42:00
好像沒這麼簡單 它的原點會隨資料長度移動 @@以data[,4]來說,只有data[1:2,4]有意義data[,7]裡B在各種長度都出現兩次 可是這不是原PO要的
作者: x88776544pc (龍飛五丈原)   2017-06-29 06:37:00
sum(table(length,data[,i])[,data[,i][jth]]!=0)算第j列的類別在第i行出現次數不為零的個數就可以了

Links booklink

Contact Us: admin [ a t ] ucptt.com