在R中,如何相对于另一个等长向量的元素有条件地填充一个向量的元素



我有一个向量purity,它包含10000块金块的纯度(作为字符串(。

purity <- sample(c("pure","high","medium","low"), 10000, replace = TRUE) 

我想生成第二个向量‘coef’,使得coef中的元素n的值取决于purity中的元素n的值,其中";纯的"高"介质;以及";"低";在purity中分别对应于在coef中的1.0、0.8、0.5和0.2。

下面是一对向量,都是手动生成的,长度=5,说明了我的目标。

> purity <- c("medium", "high", "low", "high", "pure")
> coef   <- c( 0.5,      0.8,    0.2,   0.8 ,   1.0)     #spaces added for legibility
> purity
[1] "medium" "high"   "low"    "high"   "pure"     
> coef
[1] 0.5 0.8 0.2 0.8 1.0

我如何使这个过程自动化?

我们可以使用match或命名向量进行替换。puritycoef是用于与较长向量"purity1"匹配的key/value对。当我们使用setNames时,它会在coeff上创建一个命名向量,该向量将用于与"purity1"的相应值匹配,以返回与该匹配对应的值"coeff"。

out <- unname(setNames(value, key)[purity])

-检查输出

> head(purity)
[1] "low"    "pure"   "pure"   "low"    "medium" "high"  
> head(out)
[1] 0.2 1.0 1.0 0.2 0.5 0.8

其中

purity <- sample(c("pure","high","medium","low"), 10000, replace = TRUE) 
key <- c("low", "medium", "high",  "pure")
value   <- c(0.2, 0.5,  0.8, 1.0) 

最新更新