如何通过循环将r中特定值的所有元素更改为它们的长度

时间:2015-04-18 17:30:34

标签: r rstudio

我在修改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)
  }
}

2 个答案:

答案 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