Как создать матрицу 1 и 0 из 2 векторов строк? - PullRequest
1 голос
/ 12 мая 2019

Я создаю матрицу из 1 и 0.Это 1, если слово является частью строки, 0 в противном случае.

Например, ожидаемая матрица будет выглядеть следующим образом:

                           white hanging heart holder black suitcase
white hanging heart holder     1       1     1      1     0        0
black suitcase                 0       0     0      0     1        1

В моем распоряжении два вектора:

Itemsvector = c("white hanging heart holder","black suitcase", ...)
Wordsvector = c("white","hanging","heart","holder","black", "suitcase",...)

Я играю за использование% в операторе%

strsplit(Itemsvector[1], split = ' ')[[1]] %in% Wordsvector

Также

grepl(Wordsvector[1], Itemsvector)

Что дает мне значения ИСТИНА и ЛОЖЬхотя я не в состоянии отобразить этот набор значений на всю матричную сетку.

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Мы можем сделать это намного проще с table после разделения 'Itemsvector' на list из vector s, stack его на data.frame и использования table

table(stack(setNames(strsplit(Itemsvector, " "), Itemsvector))[2:1])
#                             values
#ind                          black hanging heart holder suitcase white
#  white hanging heart holder     0       1     1      1        0     1
#  black suitcase                 1       0     0      0        1     0

Или с mtabulate

library(qdapTools)
mtabulate(setNames(strsplit(Itemsvector, " "), Itemsvector))
1 голос
/ 12 мая 2019

Вы можете попробовать использовать двойной sapply, и, поскольку у вас уже есть Wordsvector, для поиска не нужно снова делить Itemsvector. Мы можем определить, присутствует ли конкретное слово или нет, в частности, Itemsvector, используя grepl, и для дополнительной предосторожности мы добавляем границы слов, чтобы оно не совпадало с "white" с "whites".

+(t(sapply(Itemsvector, function(x) sapply(Wordsvector, function(y) 
                                  grepl(paste0("\\b",y, "\\b"), x)))))

#                           white hanging heart holder black suitcase
#white hanging heart holder     1       1     1      1     0        0
#black suitcase                 0       0     0      0     1        1

данные

Itemsvector = c("white hanging heart holder","black suitcase")
Wordsvector = c("white","hanging","heart","holder","black", "suitcase")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...