R:用他们的组替换各种值

R: Replace various values by their group

我想重新编码一个向量 x 与他们的组的个人。

set.seed(1)
x<-sample(135,2000,rep=T)
individuals<-1:135
groups<-sample(7,135,rep=T)

我已经试过了,但是如果每个等号的左边都有一个表达式,它似乎不起作用,只有当有一个明确的向量时,例如c(7,12,29,31).

x_recod<-car::recode(x,"individuals[groups=='1']=1;individuals[groups=='2']=2;individuals[groups=='3']=3;individuals[groups=='4']=4;individuals[groups=='5']=5;individuals[groups=='6']=6;individuals[groups=='7']=7")

另外我想知道是否有一种方法可以做到这一点而不必提及每个组。

编辑:这个例子的解决方案很简单,因为 x 是一个数字向量,但如果是字符呢?例如

x<-sample(letters,2000,rep=T)
individuals<-letters
groups<-sample(7,26,rep=T)

你可以使用 sapply.

x.rec <- x
invisible(sapply(groups, function(g) x.rec[groups == g] <<- g))
head(x.rec)
# [1] 6 2 5 7 6 4

您可以使用 x 来子集 groups

newx <- groups[x]

验证输出:

head(x)
#[1]  68 129  43  14  51  85
groups[head(x)]
#[1] 6 7 2 3 7 7
head(newx)
#[1] 6 7 2 3 7 7