2016-06-10 71 views
1

如果我有data.frame在R:雙向匹配在矩陣

df <- data.frame(DEP=letters[1:5], ARR=letters[11:15], NO=1:5+5) 

    DEP ARR NO 
1 a k 6 
2 b l 7 
3 c m 8 
4 d n 9 
5 e o 10 

我想創建DEP的矩陣ROW ID,並作爲ARR COL ID,並與基體填充相關匹配否...

eg

k l m n o 
a 6 7 8 9 10 ...etc 

每種組合都是獨特的。

DEP和ARR是相同的名稱向量。爲了清晰起見,我在這裏選擇了兩個不同的示例。

我奮力用比賽來對它們進行排序,並請他們到我下面產生的矩陣模板:

mat <- matrix(0,nrow(df),nrow(df)); colnames(mat) <- df$ARR; rownames(mat) <- df$DEP; 

    k l m n o 
a 0 0 0 0 0 
b 0 0 0 0 0 
c 0 0 0 0 0 
d 0 0 0 0 0 
e 0 0 0 0 0 

是否有這樣做的有效途徑?非常感謝所有的建議!

回答

5

?xtabs

xtabs(NO ~ ., data=df) 
# ARR 
#DEP k l m n o 
# a 6 0 0 0 0 
# b 0 7 0 0 0 
# c 0 0 8 0 0 
# d 0 0 0 9 0 
# e 0 0 0 0 10 
+0

謝謝!我從來沒有聽說過xtabs。 –

3

如果我理解正確你的問題,你可以使用一個稀疏矩陣的定義:

library(Matrix) 
mat <- spMatrix(length(df$DEP), length(df$ARR), 
       seq(df$DEP), seq(df$ARR), as.numeric(as.character(df$NO))) 
rownames(mat) <- df$DEP 
colnames(mat) <- df$ARR 
#> as.matrix(mat) 
# k l m n o 
#a 6 0 0 0 0 
#b 0 7 0 0 0 
#c 0 0 8 0 0 
#d 0 0 0 9 0 
#e 0 0 0 0 10 
+1

它可能最有意義使用稀疏矩陣是否會有很多「0」的 – thelatemail

+0

非常感謝!試用稀疏矩陣。我有一個錯誤:無效的類「dgTMatrix」對象:TsparseMatrix中的所有列索引(插槽'j')必須介於0和ncol-1之間。試圖整理出來。 –

+0

這個班是一個因素。我試着將它與相同的錯誤轉換。你有什麼建議? –