在 R 中,如何用另一个向量的值替换具有特定条件的矩阵中的值?

In R how would you replace values in a matrix that have a certain condition with values from another vector?

我有一个矩阵和一个这样的向量:

Matrix<-cbind(c(3,3,5,1),c(2,5,2,1))
Vector<-c(2,3,3,3)

我想用 Vector 中的值替换 >= 相应 Vector 值的 Matrix 元素,这样 Matrix 现在看起来像这样:

MatrixNew<-cbind(c(2,3,3,1),c(2,3,2,1))

什么逻辑可以实现这个?

以为您必须使用 apply(Matrix, \(x) pmin(x, Vector)),但实际上,您可以直接在 Matrix 上使用 pmin(),因为它会回收 Vector 以匹配长度.

pmin(Matrix, Vector)
#>      [,1] [,2]
#> [1,]    2    2
#> [2,]    3    3
#> [3,]    3    2
#> [4,]    1    1

也可以用dplyr::mutate来完成。 当您必须 select 变量子集时,这很有趣。

library(dplyr)        
dd = structure(list(V1 = c(3, 3, 5, 1), ` V2` = c(2, 5, 2, 1), Condition = c(2, 
                3, 3, 3)), class = "data.frame", row.names = c(NA, -4L))
dd %>% mutate(across(contains('V'), ~ifelse(.>=Condition, Condition,. )))
      V1  V2 Condition
    # 1  2   2         2
    # 2  3   3         3
    # 3  3   2         3
    # 4  1   1         3

我相信 是迄今为止最简单的一个。这是另一个使用 ifelse

的选项
> ifelse(Matrix >= Vector, Vector, Matrix)
     [,1] [,2]
[1,]    2    2
[2,]    3    3
[3,]    3    2
[4,]    1    1