Сравните слова из фрейма данных и вычислите матрицу с длиной самого большого слова для каждой пары. - PullRequest
4 голосов
/ 03 июля 2019

У меня есть фрейм данных с рядом уникальных слов.Я хочу создать код в 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 ]

6 голосов
/ 03 июля 2019

Вы можете сделать это:

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)
3 голосов
/ 03 июля 2019

Вы также можете использовать 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 голосов
/ 03 июля 2019

Другой вариант с 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
...