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