我有一个包含许多唯一单词的数据框。我想在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中做到这一点?
答案 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