如何将单个列列表转换为R中的项目矩阵?

时间:2012-10-26 22:58:01

标签: r transformation etl

我目前的数据格式如下(注意,这是1列,4行矩阵):

aa|bb  
bb|cc|ee|ee  
cc  
cc|ee

我希望它显示,以便列名称为:aa,bb,cc,dd和ee。我希望有4行,这样每行计算上面匹配行中每个字符串的出现次数。

ie)

aa bb cc dd ee  
 1  1  0  0  0  
 0  1  1  0  2  
 0  0  1  0  0   
 0  0  1  0  1 

有谁知道如何在R中这样做?我会发布我的尝试,但它只是变得丑陋和复杂。任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:4)

这是一个想法:

# (You'll use as.vector() on your matrix to get the vector x.)
x <- c("aa|bb", "bb|cc|ee|ee", "cc", "cc|ee") 

levs <- c("aa", "bb", "cc", "dd", "ee")
ll <- strsplit(x, "\\|")
t(sapply(ll, function(X) table(c(levs, X)))) - 1
#      aa bb cc dd ee
# [1,]  1  1  0  0  0
# [2,]  0  1  1  0  2
# [3,]  0  0  1  0  0
# [4,]  0  0  1  0  1

这可能会澄清(至少有点)最后一行代码的作用:

table(c(levs, c("dd", "cc", "cc", "cc"))) - 1
# 
# aa bb cc dd ee 
#  0  0  3  1  0