我正在使用一个DF,其中包含几行文字ID,文字语料库和所述语料库中的字数。它看起来像这样。
ID Text W_Count
Text_1 I love green apples 4
Text_2 I love yellow submarines 4
Text_3 Remember to buy some apples 5
Text_4 No match here 3
通过这个DF,我想计算出所有行的共同词数 例如,我想计算出所有行之间的共同词数。Text_1
和 Text_2
一语双关 Text_1
和 Text_3
只有一个。
一旦我有了这些,我需要用类似于这个矩阵的方式来显示数据。
ID Text_1 Text_2 Text_3 Text_4
Text_1 4 2 1 0
Text_2 2 4 0 0
Text_3 1 0 5 0
Text_4 0 0 0 3
我只用了两行就做到了,例如: Text_1
和 Text_2
:
Text_1 = df[1, 2]
Text_2 = df[2, 2]
Text_1_split <- unlist(strsplit(Text_1, split =" "))
Text_2_split <- unlist(strsplit(Text_2, split =" "))
count = length(intersect(Text_1_split, Text_2_split))
count
[1] 2
但是,我不知道如何对所有行系统地应用这个方法,然后显示我需要的矩阵。
任何帮助将是非常感激的。
你可能正在寻找的是 vapply
功能。考虑到以下几点。
vapply(df$ID,
function(x){
sapply(df$ID,
function(y){
x_split <- unlist(strsplit(df$Text[df$ID == x], split = " "))
y_split <- unlist(strsplit(df$Text[df$ID == y], split = " "))
return(length(intersect(x_split, y_split)))
})
},
integer(nrow(df)))
The vapply
函数("vector-apply")将一个函数应用于一系列输入,并以第三个参数的形式返回一个向量(在本例中,一个长度等于数据输入长度的整数)。