0

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

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) 

关于如何做到这一点的任何想法(循环或矢量化)?谢谢

4

2 回答 2

4

你想要这个match功能。

match(y, x)

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

weight[match(y, x)]
于 2013-07-31T22:37:26.287 回答
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
于 2013-07-31T22:40:58.130 回答