我有一个数字矩阵如下
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
有没有办法在没有通过循环实际编码的情况下执行此操作?
答案 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 :(得分: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