R 用矩阵的行索引替换矩阵中的行值
我使用一个r矩阵(例如R 用矩阵的行索引替换矩阵中的行值,r,matrix,indexing,row,R,Matrix,Indexing,Row,我使用一个r矩阵(例如[[0,0,0,1],[0,1,0,1],[1,0,0,0],[0,0,1]])表示 光栅。我想用它的行索引值替换除0之外的所有值。有类似的吗 matrix[matrix==1] <- row_index matrix[matrix==1]希望不要因为建议使用for循环而大发雷霆,但我们会看到: 这是你的矩阵 mymat <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
[[0,0,0,1],[0,1,0,1],[1,0,0,0],[0,0,1]]
)表示
光栅。我想用它的行索引值替换除0之外的所有值。有类似的吗
matrix[matrix==1] <- row_index
matrix[matrix==1]希望不要因为建议使用for循环而大发雷霆,但我们会看到:
这是你的矩阵
mymat <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
nrow = 4, byrow = TRUE)
mymat
# [,1] [,2] [,3] [,4]
# [1,] 0 0 0 1
# [2,] 0 1 0 1
# [3,] 1 0 0 0
# [4,] 0 0 1 1
对于简洁、富有表现力的解决方案,我可能会使用以下方法:
m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
nrow = 4, byrow = TRUE)
m[m!=0] <- row(m)[m!=0]
m
# [,1] [,2] [,3] [,4]
# [1,] 0 0 0 1
# [2,] 0 2 0 2
# [3,] 3 0 0 0
# [4,] 0 0 4 4
m也许我没有抓住你问题的重点,但是你呢
> m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
+ nrow = 4, byrow = TRUE)
> m * 1:nrow(m)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 1
[2,] 0 2 0 2
[3,] 3 0 0 0
[4,] 0 0 4 4
>
>m*1:nrow(m)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 1
[2,] 0 2 0 2
[3,] 3 0 0 0
[4,] 0 0 4 4
>
(ETA:R按列填充矩阵,逐项乘积运算符通过逐列复制矩阵使两个矩阵一致,直到它们匹配为止。此处的*运算符将每个项目乘以它所属的行。)我正在尝试使用哪个(m==1)%%4
,并被替换为4
(正好可以被4整除)的0
所困扰。这太棒了!我要记住行
。@Arun——我感觉到你了。我花了太长时间才学会这三个超级有用的相关咒语:m-Heh。我甚至不知道行
。很好。哇,这正是我想要的。非常感谢。@user2132627,请务必单击Josh答案旁边的复选标记,将其答案标记为已接受,如果它正是您要查找的答案!谢谢
m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
nrow = 4, byrow = TRUE)
m[m!=0] <- row(m)[m!=0]
m
# [,1] [,2] [,3] [,4]
# [1,] 0 0 0 1
# [2,] 0 2 0 2
# [3,] 3 0 0 0
# [4,] 0 0 4 4
> m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1),
+ nrow = 4, byrow = TRUE)
> m * 1:nrow(m)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 1
[2,] 0 2 0 2
[3,] 3 0 0 0
[4,] 0 0 4 4
>