我有一个看似简单但无法回答的问题:我有三个向量:
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)
关于如何做到这一点的任何想法(循环或矢量化)?谢谢
你想要这个match
功能。
match(y, x)
返回匹配的索引,使用它来构建新的权重向量
weight[match(y, x)]
#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