在 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
我有一个矩阵和一个这样的向量:
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