[英]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.