如果我有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
有没有一种有效的方法呢?非常感谢所有建议!
答案 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