我在修改r中的向量时遇到问题,因此所有元素都表示为元素的数量。
更具体地说:
z <- c(1,1,2,2,2)
我想要做的是创建一个遍历整个向量的循环,并用向量中的1的数量替换1,将2s替换为向量中的2的数量。我想获得以下结果:
z <- c(2,2,3,3,3)
我已完成以下操作,仅适用于1s,但不适用于2s。
for (i in 1:length(z)){
for (k in 1:length(unique(z))){
if(z==k){z[z==k]<-length(which(z==k))}
else(z[z==k]<-k)
}
print(z)
}
}
答案 0 :(得分:2)
您可以使用ave
:
> z<- c(1,1,2,2,2)
> z
[1] 1 1 2 2 2
> ave(z, z, FUN = length)
[1] 2 2 3 3 3
答案 1 :(得分:0)
您可能希望使用R中的table()功能来执行计数作业...
z <- c(1, 1, 2, 2, 2)
t1 <- as.data.frame(table(z))
z <- t1$Freq[match(z,t1[,1])]
[1] 2 2 3 3 3