2012-10-26 47 views
4

我现在有数据即以下面的格式(注意,这是第1列,第4行矩阵):如何将单列列表转换为R中的项目矩阵?

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

,我希望它显示,使得列名:AA,BB,CC, dd和ee。我希望有4行,每行记录每个字符串出现在上面匹配行中的次数。

即)

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中做到这一点?我会发布我的尝试,但它只是变得丑陋和复杂。任何帮助将非常感激。

在此先感谢。

+0

我回滚您更改标题,其中包括[已解决]。堆栈溢出显示的方式是接受(选中复选标记)最佳/正确答案。见http://stackoverflow.com/faq#howtoask –

+0

@布赖恩 - 感谢编辑,我接受了答案。 – Indy

回答

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 
+0

谢谢,那正是我需要的。我想我需要更多的练习,使用无限有用的“应用”功能。 – Indy

+1

@Indy - 很高兴能帮到你。您可以通过点击左侧的复选标记来“接受”我的答案,而不是通过在标题中放置“[已解决]”来标记解决方案。干杯。 –