2012-10-26 85 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 - 很高興能幫到你。您可以通過點擊左側的複選標記來「接受」我的答案,而不是通過在標題中放置「[已解決]」來標記解決方案。乾杯。 –