如何基于向量t、c和t2自动生成对应向量c2?
解决方法
下面提供几种在R中根据t、c和t2生成目标向量c2的实用方法:
方法1:直接向量索引匹配
当t的元素是连续整数且与c的位置一一对应时,直接用t2作为索引提取c的对应值即可:
t <- c(1,2,3) c <- c(0.9, 0.8, 0.4) t2 <- c(1,1,1,2,2,3) c2 <- c[t2]
运行后c2会得到目标结果c(0.9, 0.9, 0.9, 0.8, 0.8, 0.4)。
方法2:match()函数(通用场景)
如果t的元素不是连续整数、或者顺序混乱,用match()函数更稳妥——它会先找到t2每个元素在t中的位置,再用该位置提取c的对应值:
c2 <- c[match(t2, t)]
这个方法适配所有t与c存在一一对应关系的场景,不受t的元素顺序、类型限制。
方法3:dplyr包的recode()函数(tidyverse风格)
若习惯使用tidyverse工具链,可通过dplyr的recode()实现批量映射:
library(dplyr) c2 <- recode(t2, !!!setNames(c, t))
其中setNames(c, t)会将t的元素设为名字、c的元素设为对应值,!!!用于展开这个命名向量完成映射。
内容的提问来源于stack exchange,提问作者Miguel Angel Arnau
相关产品推荐
相关产品推荐

