Pergunta

Eu gostaria de dar uma sequência de números para uma nova coluna para um quadro de dados.Mas esta sequência repete várias vezes, com base em um valor em outra coluna.(eu.e Ele começa a partir de 1 até o valor específico será alterado para outro valor).

O meu problema é como definir o ponto final de cada sequência em r.

Uma parte do meu quadro de dados com a coluna "V2" o que eu pretendo adicionar:

  V1      V2(new added column with sequential numbers)           
  12      1
  12      2
  12      3
  12      4
  12      5
  13      1
  13      2
  13      3
  13      4
  13      5
  13      6
  14      1
  14      2
  14      3
  14      4

Eu tentei usar o código a seguir, que não estava funcionando!

count <- table(df$V1)
c <- as.integer(names(count)[df$V1==12])
    repeat{
      df$V2<- seq(1,c, by=1)
      if(df$V1!=12){
        break
      }
    }
Foi útil?

Solução

Parece que você pode estar olhando para rle uma vez que você está interessado em qualquer época, o "V1" variável alterações.

Tente o seguinte:

> sequence(rle(df$V1)$lengths)
 [1] 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4

Outras dicas

rle é uma solução muito boa, mas você também poderia ter usado ave:

tab$V2 <- ave(tab$V1, tab$V1, FUN=seq_along)

hth

Bem Ananda batidas do meu esforço:

vec = numeric(0)
for(i in unique(df$V1)){
  n = length(df$V1[df$V1 == i])
  vec = c(vec, 1:n)
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top