比较数据框中的单词,并计算每对最大单词长度的矩阵

时间:2019-07-03 11:28:46

标签: r dataframe matrix distance text-mining

我有一个包含许多唯一单词的数据框。我想在R中创建代码,其中每个单词都将与所有单词进行比较,并创建一个矩阵,其中每个单词对的最大单词的长度。

要更全面,请考虑以下示例。

test <- c("hello", "hi", "play", "kid") 

我想创建一个矩阵,用于比较测试中的每个单词,并给出最大单词的长度。

对于前面的示例,我想采用以下矩阵:

       hello  hi play kid
 hello  5     5   5    5

  hi    5     2   4    3

 play   5     4   4    4

  kid   5     3   4    3

如何在R中做到这一点?

3 个答案:

答案 0 :(得分:6)

您可以这样做:

outer(test, test, function(x,y) pmax(nchar(x), nchar(y)))

     [,1] [,2] [,3] [,4]
[1,]    5    5    5    5
[2,]    5    2    4    3
[3,]    5    4    4    4
[4,]    5    3    4    3

或更短,如@Ronak Shah所建议

outer(nchar(test), nchar(test), pmax)

答案 1 :(得分:3)

您也可以使用sapply

mat <- sapply(test, function(x) pmax(nchar(x), nchar(test)))
rownames(mat) <- colnames(mat)
mat
      hello hi play kid
hello     5  5    5   5
hi        5  2    4   3
play      5  4    4   4
kid       5  3    4   3

答案 2 :(得分:2)

带有expand.grid的另一个选项可以是

matrix(do.call(pmax, expand.grid(nchar(test), nchar(test))), nrow = length(test))

#     [,1] [,2] [,3] [,4]
#[1,]    5    5    5    5
#[2,]    5    2    4    3
#[3,]    5    4    4    4
#[4,]    5    3    4    3