首页 > 解决方案 > 逗号分隔的字符串向量到矩阵

问题描述

一个小时以来,我一直在研究这个问题,感觉就像是撞到了墙上:我想将逗号分隔的字符串向量转换为矩阵。

我有一个像这样的向量:

'ABC,DFGH,IJ'
'KLMN,OP,DFGH,QR'
'ST,ABC'

我想得到一个矩阵

ABC DFGH IJ KLMN OP QR ST
1   1    1  0    0  0  0
0   1    0  1    1  1  0
1   0    0  0    0  0  1

样本数据:

myvec<-c('ABC,DFGH,IJ','KLMN,OP,DFGH,QR','ST,ABC')

Base R 的答案也很受欢迎。对于一些更大的数据集,我可能再次需要这个技巧。

标签: r

解决方案


另一个基础 R 解决方案:

> myvec<-c('ABC,DFGH,IJ','KLMN,OP,DFGH,QR','ST,ABC')
> mv <- strsplit(myvec,",")
> u <- unique(unlist(mv))
> t(sapply(mv, function(x) u %in% x)*1)
# output without colnames
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    1    1    0    0    0    0
[2,]    0    1    0    1    1    1    0
[3,]    1    0    0    0    0    0    1
> r <- t(sapply(mv, function(x) u %in% x)*1)
# adding colnames 
> colnames(r) <- u
> r
     ABC DFGH IJ KLMN OP QR ST
[1,]   1    1  1    0  0  0  0
[2,]   0    1  0    1  1  1  0
[3,]   1    0  0    0  0  0  1

推荐阅读