繁体   English   中英

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

[英]How do I create 1s and 0s matrix from 2 vectors of strings?

我正在创建一个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

我可以使用的是2个向量:

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)

这确实给了我TRUE和FALSE值,虽然我迷失了将这组值映射到整个矩阵网格。

将“Itemsvector”拆分为vector s list后,我们可以更轻松地使用table ,将其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))

你可以尝试使用double 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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM