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