3

[[0,0,0,1],[0,1,0,1],[1,0,0,0],[0,0,1,1]]我使用表示栅格的 r 矩阵(例如)。我想用它的行索引值替换除 0 之外的每个值。有没有类似的东西

matrix[matrix==1] <- row_index

这样我的结果会是什么样子[[0,0,0,1],[0,2,0,2],[3,0,0,0],[0,0,4,4]]

我在 Mac (10.7.5) 和 RPY2 2.2.6 上使用 R 2.15.1 来启动 R-Methods。或者有没有其他方法可以为诸如等统计函数获得合理的histogram结果chi_square

4

3 回答 3

5

对于简洁、富有表现力的解决方案,我可能会使用这个:

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
于 2013-03-04T17:46:39.657 回答
2

希望所有的地狱都不会因为建议一个 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

这是一个 for 循环,它使用基本子集来识别要替换的案例。

for (i in 1:nrow(mymat)) {
  mymat[i, ][mymat[i, ] != 0] <- i
}

这是结果。

mymat
#      [,1] [,2] [,3] [,4]
# [1,]    0    0    0    1
# [2,]    0    2    0    2
# [3,]    3    0    0    0
# [4,]    0    0    4    4
于 2013-03-04T17:16:03.593 回答
0

也许我错过了你问题的重点,但是怎么样

> 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
>

(ETA:R 按列填充矩阵,逐项乘积运算符通过逐列复制它们直到它们适合,从而使所涉及的两个矩阵一致。这里的 * 运算符最终将每个项乘以它所属的行。)

于 2016-11-28T02:55:39.050 回答