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)でR 2.15.1を使用し、RPY22.2.6を使用してRメソッドを開始しています。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 は列ごとに行列を埋め、項目ごとの積演算子は、列ごとにそれらが収まるまで複製することによって、関連する 2 つの行列を適合させます。ここでの * 演算子は、各項目をそれが属する行で乗算します。)

于 2016-11-28T02:55:39.050 に答える