2016-06-10 72 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

这个班是一个因素。我试着将它与相同的错误转换。你有什么建议? –