R 如何发现数字序列中的模式

R 如何发现数字序列中的模式,r,sequence,R,Sequence,我在R里有一个列表,其中每一行都是圣经文本的半节。列为:B(ook)、C(chapter)、V(erse)、H(alf-verse)和a1-a31。这些带有一个加号和一个整数的列是表示希伯来语cantillation标记的代码 我需要的是一种在数字序列中找到模式的方法,它告诉我哪些整数组合出现以及出现了多少次 例如:74加63是多少次;63前面加05的次数是多少 理想情况下,它也会告诉我两个以上的组合。例如:74前面加05,05前面加35的次数是多少 最后,我需要以某种方式绘制这张图表 下面是列

我在R里有一个列表,其中每一行都是圣经文本的半节。列为:B(ook)、C(chapter)、V(erse)、H(alf-verse)和a1-a31。这些带有一个加号和一个整数的列是表示希伯来语cantillation标记的代码

我需要的是一种在数字序列中找到模式的方法,它告诉我哪些整数组合出现以及出现了多少次

例如:74加63是多少次;63前面加05的次数是多少

理想情况下,它也会告诉我两个以上的组合。例如:74前面加05,05前面加35的次数是多少

最后,我需要以某种方式绘制这张图表

下面是列表的标题和前3行

B,C,V,H,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31
Genesis,1,1,A,73,74,92 
Genesis,1,1,B,71,73,71,00
Genesis,1,2,A,81,71,3303,80,73,74,92

我有一个相当复杂的解决方案,不确定它是否是最好的。 我使用
data.table
进行重塑和数据处理

数据:

library(data.table)

df <- setDT(read.table(text="
B,C,V,H,a1,a2,a3,a4,a5,a6,a7
Genesis,1,1,A,73,74,92,NA,NA,NA,NaN 
Genesis,1,1,B,71,73,71,00,NA,NA,NA
Genesis,1,2,A,81,71,3303,80,73,74,92",h=T,sep = ","))
连接由
指定的plouf所有列的前3行。SDcols=grep(“Genesis”,names(plouf),value=T)

这是从《创世纪》开始的专栏。对3行的所有连续组合执行此操作,并将输出转换为向量,得到向量
allcomb
。它包含与NA的组合,您可以清洁:

allcomb <- allcomb[!grepl("NA",allcomb)]

Genesis_1_1_A Genesis_1_1_B Genesis_1_2_A Genesis_1_1_B Genesis_1_2_A Genesis_1_2_A Genesis_1_2_A Genesis_1_2_A 
   "73,74,92"    "71,73,71"  "81,71,3303"     "73,71,0"  "71,3303,80"  "3303,80,73"    "80,73,74"    "73,74,92" 
向量
allcomb
包含将组合作为列名的名称。因此,您可以找到每个重复:

sapply(unique(allcomb),function(comb){
  names(allcomb[grep(comb,allcomb)])}
  )

    $`73,74,92`
[1] "Genesis_1_1_A" "Genesis_1_2_A"

$`71,73,71`
[1] "Genesis_1_1_B"

$`81,71,3303`
[1] "Genesis_1_2_A"

$`73,71,0`
[1] "Genesis_1_1_B"

$`71,3303,80`
[1] "Genesis_1_2_A"

$`3303,80,73`
[1] "Genesis_1_2_A"

$`80,73,74`
[1] "Genesis_1_2_A"

我有一个相当复杂的解决方案,不确定它是否是最好的。 我使用
data.table
进行重塑和数据处理

数据:

library(data.table)

df <- setDT(read.table(text="
B,C,V,H,a1,a2,a3,a4,a5,a6,a7
Genesis,1,1,A,73,74,92,NA,NA,NA,NaN 
Genesis,1,1,B,71,73,71,00,NA,NA,NA
Genesis,1,2,A,81,71,3303,80,73,74,92",h=T,sep = ","))
连接由
指定的plouf所有列的前3行。SDcols=grep(“Genesis”,names(plouf),value=T)

这是从《创世纪》开始的专栏。对3行的所有连续组合执行此操作,并将输出转换为向量,得到向量
allcomb
。它包含与NA的组合,您可以清洁:

allcomb <- allcomb[!grepl("NA",allcomb)]

Genesis_1_1_A Genesis_1_1_B Genesis_1_2_A Genesis_1_1_B Genesis_1_2_A Genesis_1_2_A Genesis_1_2_A Genesis_1_2_A 
   "73,74,92"    "71,73,71"  "81,71,3303"     "73,71,0"  "71,3303,80"  "3303,80,73"    "80,73,74"    "73,74,92" 
向量
allcomb
包含将组合作为列名的名称。因此,您可以找到每个重复:

sapply(unique(allcomb),function(comb){
  names(allcomb[grep(comb,allcomb)])}
  )

    $`73,74,92`
[1] "Genesis_1_1_A" "Genesis_1_2_A"

$`71,73,71`
[1] "Genesis_1_1_B"

$`81,71,3303`
[1] "Genesis_1_2_A"

$`73,71,0`
[1] "Genesis_1_1_B"

$`71,3303,80`
[1] "Genesis_1_2_A"

$`3303,80,73`
[1] "Genesis_1_2_A"

$`80,73,74`
[1] "Genesis_1_2_A"

整数可以有多高(它们有界吗?)我看到一个是3303(或者这是一个拼写错误?),不,这不是一个拼写错误。有些单元格有4、6或8个数字。这是因为特定单词有2个、3个或4个重音,每个重音都有2个数字。最高的数字是74330305如果有必要,我可以将所有编号的代码更改为更合理的代码。例如,从1到40左右。因此,您希望找到“n-grams”。我没有这样做的经验,但我知道“tm”软件包可以在文本中找到ngrams。我不确定它是否能处理整数。谢谢Joe,n-gram软件包完成了这项工作。它也可以处理数字。整数可以有多高(它们有界吗?)我看到一个是3303(或者是打字错误?)。不,不是打字错误。有些单元格有4、6或8个数字。这是因为特定单词有2个、3个或4个重音,每个重音都有2个数字。最高的数字是74330305如果有必要,我可以将所有编号的代码更改为更合理的代码。例如,从1到40左右。因此,您希望找到“n-grams”。我没有这样做的经验,但我知道“tm”软件包可以在文本中找到ngrams。我不确定它是否能处理整数。谢谢Joe,n-gram软件包完成了这项工作。它也能处理数字。这是一个非常逼真的丹尼斯。非常感谢,我也会试试这个。这是一个很有特色的丹尼斯。非常感谢,我也会试试这个。
> table(allcomb)
3303,80,73 71,3303,80   71,73,71    73,71,0   73,74,92   80,73,74 81,71,3303 
     1          1          1          1          2          1          1 
sapply(unique(allcomb),function(comb){
  names(allcomb[grep(comb,allcomb)])}
  )

    $`73,74,92`
[1] "Genesis_1_1_A" "Genesis_1_2_A"

$`71,73,71`
[1] "Genesis_1_1_B"

$`81,71,3303`
[1] "Genesis_1_2_A"

$`73,71,0`
[1] "Genesis_1_1_B"

$`71,3303,80`
[1] "Genesis_1_2_A"

$`3303,80,73`
[1] "Genesis_1_2_A"

$`80,73,74`
[1] "Genesis_1_2_A"