作者eco100 ( )
看板R_Language
标题[问题] 有点小复杂的字串计数
时间Wed Jun 28 23:55:37 2017
我问题是这样的
我有如下的字串 基本上是 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
所以我其实就是想要每一组长度字串的这个计数结果
这样举例不知是否清楚 @@
我想了一天 还是不知道有什麽具体的写法
谢谢各位指教
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.207.174
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1498665340.A.4BC.html
※ 编辑: eco100 (1.164.207.174), 06/28/2017 23:58:33
1F:→ x88776544pc: 如果把资料补齐成 k x 29 的矩阵,用 length 跟 data 06/29 00:22
2F:→ x88776544pc: [,i] 作成的 table 就可以看出第 i 行下某类在不同长 06/29 00:22
3F:→ x88776544pc: 度下出现的次数 06/29 00:22
4F:→ clsmbstu: 好像没这麽简单 它的原点会随资料长度移动 @@ 06/29 00:42
5F:→ clsmbstu: 以data[,4]来说,只有data[1:2,4]有意义 06/29 00:46
6F:→ clsmbstu: data[,7]里B在各种长度都出现两次 可是这不是原PO要的 06/29 00:50
7F:→ x88776544pc: sum(table(length,data[,i])[,data[,i][jth]]!=0) 06/29 06:37
8F:→ x88776544pc: 算第j列的类别在第i行出现次数不为零的个数就可以了 06/29 06:40