我有一个向量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
或命名向量进行替换。purity
和coef
是用于与较长向量"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)