在R中:与矩阵的双向匹配

时间:2016-06-10 04:21:06

标签: r matrix

如果我有data.frame

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的矩阵,并用相关的匹配NO填充矩阵......

e.g。

  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

有没有一种有效的方法呢?非常感谢所有建议!

2 个答案:

答案 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

答案 1 :(得分: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