如何从2个字符串向量创建1s和0s矩阵?

时间:2019-05-12 12:01:32

标签: r matrix

我正在创建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",...)

我正在玩弄%in%运算符的使用

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

grepl(Wordsvector[1], Itemsvector)

尽管我迷失了将这组值映射到整个矩阵网格的方法,但确实提供了TRUE和FALSE值。

2 个答案:

答案 0 :(得分:2)

在将“ Itemsvector”分割为tablelistvector到data.frame并使用{ stack

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

答案 1 :(得分:1)

您可以尝试使用双sapply,因为您已经有Wordsvector来搜索,所以无需再次分割Itemsvector。我们可以使用Itemsvector查找是否存在特定的单词,特别是grepl,并且为了格外注意,我们添加了单词边界,以使其与"white"与“ {{1}”不匹配}。

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