基于R中两个其他变量的匹配来复制变量

时间:2013-07-31 22:11:48

标签: r vector match

我有一个看似简单的问题,我无法回答:我有三个向量:

x <- c(1,2,3,4)
weight <- c(5,6,7,8)
y <- c(1,1,1,2,2,2)

我想创建一个新的向量,复制每次x中的元素与y匹配时的权重值,以便它生成以下与y关联的新权重向量:

y_weight <- c(5,5,5,6,6,6) 

有关如何执行此操作的任何想法(循环或矢量化)?感谢

2 个答案:

答案 0 :(得分:4)

您需要match功能。

match(y, x)

返回匹配的索引,用于构建新的权重向量

weight[match(y, x)]

答案 1 :(得分:0)

#Using plyr

library(plyr)
df<-as.data.frame(cbind(x,weight)) # converting to dataframe
df<-rename(df,c(x="y")) # rename x as y for joining dataframes
y<-as.data.frame(y) # converting to dataframe
mydata <- join(df, y, by = "y",type="right")
> mydata
  y weight
1 1      5
2 1      5
3 1      5
4 2      6
5 2      6
6 2      6