2013-06-28 44 views
0

我有一個數字矩陣如下矩陣操作基於閾值向量中的R

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 

有沒有辦法做到這一點,而不是實際上通過循環編碼?

回答

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 
1

是的,你可以:

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

我編了一個不同的例子,因爲你不容易複製。

或者像迪文所指出的,R會爲你做的矩陣結構:

m[m > c(2,6,8,4,5)] <- 0 
+0

我不認爲你需要第二個矩陣呼叫'M [M