在R中:矩阵的双向匹配
如果我有一个data.frame在R中:矩阵的双向匹配,r,matrix,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和ARR是相同的名称向量。为了清晰起见,我在这里选择了两个不同的示例 我正在努力使用match对它们进行排序,并将它们填入我在
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和ARR是相同的名称向量。为了清晰起见,我在这里选择了两个不同的示例
我正在努力使用match对它们进行排序,并将它们填入我在下面创建的矩阵模板中:
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
有没有一种有效的方法?非常感谢所有的建议 如果我正确理解了您的问题,您可以使用稀疏矩阵定义:
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
如果我正确理解了您的问题,您可以使用稀疏矩阵定义:
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
?xtabs:
?xtabs:
如果有很多0,那么使用稀疏矩阵可能是最有意义的。谢谢!尝试稀疏矩阵。我有一个错误:无效的类“dgTMatrix”对象:TsparseMatrix中的所有列索引槽“j”必须介于0和ncol-1之间。试图把它弄清楚。班级是一个因素。我试着用同样的错误转换它。你推荐什么?谢谢!我认为我们在mat中缺少了一个括号。这个错误表明df$NO存储为一个factor类。要解决这个问题,我们可以将df$NO包装到as.numericas.character中,请参见编辑。希望这有帮助。如果有很多0's的话,使用稀疏矩阵可能是最有意义的。谢谢!尝试稀疏矩阵。我有一个错误:无效的类“dgTMatrix”对象:TsparseMatrix中的所有列索引槽“j”必须介于0和ncol-1之间。试图把它弄清楚。班级是一个因素。我试着用同样的错误转换它。你推荐什么?谢谢!我认为我们在mat中缺少了一个括号。这个错误表明df$NO存储为一个factor类。要解决这个问题,我们可以将df$NO包装到as.numericas.character中,请参见编辑。希望这有帮助。
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