R语言:如何利用数据框元素提取向量中的对应元素
解决方案
看起来你是想用lookup数据框里的二进制行作为索引,从Match和P1向量里提取对应元素对吧?我来帮你一步步实现~
首先先把你的代码补全(我假设P1是重复1-5三次,这样和Match的长度保持一致):
# 创建lookup数据框 X1 <- c(0,0,1,1,0) X2 <- c(1,0,0,1,0) X3 <- c(0,1,1,1,1) lookup <- data.frame(X1, X2, X3) # 定义向量 Match <- 1:15 P1 <- rep(1:5, 3) # 补全rep参数,得到长度为15的向量
接下来,我们需要把lookup里的每一行二进制数据转换成索引值,这样就能用它去提取Match和P1的对应元素了。这里我默认X1是2²位(对应权重4)、X2是2¹位(对应权重2)、X3是2⁰位(对应权重1),计算每行的十进制数值作为索引:
# 计算每行对应的索引 lookup$row_index <- lookup$X1 * 4 + lookup$X2 * 2 + lookup$X3 * 1
现在你就可以用这个索引去提取向量里的元素了:
# 从Match中提取对应元素 lookup$matched_value <- Match[lookup$row_index] # 从P1中提取对应元素 lookup$p1_value <- P1[lookup$row_index]
最后查看生成的结果:
print(lookup) # X1 X2 X3 row_index matched_value p1_value # 1 0 1 0 2 2 2 # 2 0 0 1 1 1 1 # 3 1 0 1 5 5 5 # 4 1 1 1 7 7 2 # 5 0 0 1 1 1 1
如果你的二进制位权重和我假设的不一样(比如X3是最高位),只需要调整乘法的系数就行啦!比如改成lookup$X3 *4 + lookup$X2*2 + lookup$X1*1就可以切换权重顺序。
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

