Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中:矩阵的双向匹配_R_Matrix - Fatal编程技术网

在R中:矩阵的双向匹配

在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对它们进行排序,并将它们填入我在

如果我有一个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对它们进行排序,并将它们填入我在下面创建的矩阵模板中:

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