0

次のような数値行列があります

1 2 3 4 5 
1 4 6 1 4
2 4 1 6 8 
1 7 3 6 7
1 4 5 6 2

ベクトル c(2,4,2,6,8) があります

行ごとに、ベクター内の対応する値を取得し、ベクター値より大きい行内のす​​べての値が 0 になる新しい行列を作成します。

出力は次のようになります

1 2 0 0 0   # greater than 2 is changed to 0
1 4 0 1 4   # greater than 4 changed to 0
2 0 1 0 0   # greater than 2 changed to 0
1 0 3 6 0   # greater than 6 changed to 0
1 4 5 6 2   # greater than 8 changed to 0

実際にループを介してコーディングせずにこれを行う方法はありますか?

4

2 に答える 2

3
DF <- read.table(text="1 2 3 4 5
1 4 6 1 4
2 4 1 6 8
1 7 3 6 7
1 4 5 6 2") 

m <- as.matrix(DF)
v <- c(2,4,2,6,8)

m * (m <= v)
#      V1 V2 V3 V4 V5
# [1,]  1  2  0  0  0
# [2,]  1  4  0  1  4
# [3,]  2  0  1  0  0
# [4,]  1  0  3  6  0
# [5,]  1  4  5  6  2
于 2013-06-28T16:50:01.017 に答える
1

はい、次のことができます。

m <- matrix(sample(10,25,replace = TRUE),5,5)
> m[m > matrix(c(2,6,8,4,5),5,5)] <- 0

あなたの例は簡単に再現できなかったので、別の例を作成しました。

または、DWin が指摘するように、R が行列の構築を行います。

m[m > c(2,6,8,4,5)] <- 0
于 2013-06-28T16:48:25.437 に答える