R:使用单独的坐标矩阵访问矩阵元素
我有一个矩阵(expTrans),当前填充了零。我有第二个矩阵(expCoor),其中第二列用列名填充,第三列用行号填充。我想用第二个矩阵中的坐标将第一个矩阵中的一些元素改为1。当我使用这段代码时,R用1填充了每一列中提到的每一行(列的结果相同):R:使用单独的坐标矩阵访问矩阵元素,r,matrix,R,Matrix,我有一个矩阵(expTrans),当前填充了零。我有第二个矩阵(expCoor),其中第二列用列名填充,第三列用行号填充。我想用第二个矩阵中的坐标将第一个矩阵中的一些元素改为1。当我使用这段代码时,R用1填充了每一列中提到的每一行(列的结果相同): exptransm[as.numeric(ind[,1]),ind[,3]]m a b c d e f g h i j [1,] 1 1 1 1 1 0 0 0 0 1 [2,] 1 1 1 1 1 0 0 0 0 1 [3,] 1 1 1 1 1
exptransm[as.numeric(ind[,1]),ind[,3]]m
a b c d e f g h i j
[1,] 1 1 1 1 1 0 0 0 0 1
[2,] 1 1 1 1 1 0 0 0 0 1
[3,] 1 1 1 1 1 0 0 0 0 1
[4,] 1 1 1 1 1 0 0 0 0 1
[5,] 1 1 1 1 1 0 0 0 0 1
[6,] 1 1 1 1 1 0 0 0 0 1
[7,] 1 1 1 1 1 0 0 0 0 1
[8,] 1 1 1 1 1 0 0 0 0 1
[9,] 1 1 1 1 1 0 0 0 0 1
[10,] 1 1 1 1 1 0 0 0 0 1
我希望a列有3个1(第4、2、8行),b列有3个1(第9、6、5行),c列有1个1(第7行),d列有1个1(第10行),e列有1个1(第8行),j列有1个1(第3行)。有一种方法可以将两列数字矩阵用于“[”或“[有一种方法可以对“[”或“[使用两列数字矩阵有一种方法可以对“[”或“[有一种方法可以对“[”或“[使用两列数字矩阵[您能提供一个简化的数据示例吗?目前您有
expTrans
现金流dmat
费用和expCoor
。所有这些都是表示您的问题所必需的吗?我不知道您想做什么。另外,您说expCoor
中的第二列包含您的数据列名。那么为什么要引用expCoor[,1]
而不是expCoor[,2]
在列索引的最后一行代码中?您能提供一个简化的数据示例吗?目前您有expTrans
现金流dmat
费用和expCoor
。所有这些都是表示您的问题所必需的吗?我不知道您正在尝试做什么。另外,您假设expCoor
中的第二列包含您的列名。那么您为什么要引用expCoor[,1]
而不是expCoor[,2]
在列索引的最后一行代码中?您能提供一个简化的数据示例吗?目前您有expTrans
现金流dmat
费用和expCoor
。所有这些都是表示您的问题所必需的吗?我不知道您正在尝试做什么。另外,您假设expCoor
中的第二列包含您的列名。那么您为什么要引用expCoor[,1]
而不是expCoor[,2]
在列索引的最后一行代码中?您能提供一个简化的数据示例吗?目前您有expTrans
现金流dmat
费用和expCoor
。所有这些都是表示您的问题所必需的吗?我不知道您正在尝试做什么。另外,您假设expCoor
中的第二列包含您的列名。那么您为什么要引用expCoor[,1]
而不是expCoor[,2]
在列索引的最后一行代码中?好的。提供了解决方案。请记住…numericOK。提供了解决方案。请记住…numericOK。提供了解决方案。请记住…numericOK。提供了解决方案。请记住…numericOK
expTrans<-matrix(0, nrow(cashflows), ncol(dmat))
colnames(expTrans)<-substr(colnames(dmat),4,6)
expTrans[expCoor[,3],colnames(expenses)[expCoor[,1]]]<-1
> m<-matrix(0,ncol=10,nrow=10)
> colnames(m)<-c("a","b","c","d","e","f","g","h","i","j")
> m
a b c d e f g h i j
[1,] 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 0
[9,] 0 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 0 0 0 0 0 0 0
> ind<-cbind(sample(1:10,10),sample(1:10,10), c("a","a","b","j","c","d","e", "a", "b", "b"))
> ind
[,1] [,2] [,3]
[1,] "4" "8" "a"
[2,] "2" "9" "a"
[3,] "9" "3" "b"
[4,] "3" "1" "j"
[5,] "7" "4" "c"
[6,] "10" "7" "d"
[7,] "8" "6" "e"
[8,] "1" "2" "a"
[9,] "6" "5" "b"
[10,] "5" "10" "b"
> m[as.numeric(ind[,1]),ind[,3]]<-1
> m
a b c d e f g h i j
[1,] 1 1 1 1 1 0 0 0 0 1
[2,] 1 1 1 1 1 0 0 0 0 1
[3,] 1 1 1 1 1 0 0 0 0 1
[4,] 1 1 1 1 1 0 0 0 0 1
[5,] 1 1 1 1 1 0 0 0 0 1
[6,] 1 1 1 1 1 0 0 0 0 1
[7,] 1 1 1 1 1 0 0 0 0 1
[8,] 1 1 1 1 1 0 0 0 0 1
[9,] 1 1 1 1 1 0 0 0 0 1
[10,] 1 1 1 1 1 0 0 0 0 1
> expTrans<-matrix(0, 3,4);expTrans
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
> dmat <- matrix( c(1,3,4,2,2,2),ncol=3, byrow=TRUE);dmat
[,1] [,2] [,3]
[1,] 1 3 4
[2,] 2 2 2
> colnames(expTrans)<- colnames(dmat); rownames(expTrans) <-rownames(dmat)
> expTrans[cbind(dmat[,2],dmat[,3] )] <- dmat[,1]
> expTrans
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 2 0 0
[3,] 0 0 0 1
> ?'['
> m[cbind( as.numeric(ind[,1]), match( ind[,3], colnames(m) ) ) ] <- 1
> m
a b c d e f g h i j
[1,] 0 1 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0
[3,] 0 0 0 1 0 0 0 0 0 0
[4,] 1 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 1
[6,] 0 1 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 1 0 0 0 0 0
[8,] 1 0 0 0 0 0 0 0 0 0
[9,] 0 0 1 0 0 0 0 0 0 0
[10,] 1 0 0 0 0 0 0 0 0 0