Дать индекс по данным - PullRequest
0 голосов
/ 12 июня 2019

Надеюсь, вы поможете мне с моей проблемой.

Я хотел бы создать индекс для каждой группы в моих данных.

Данные выглядят следующим образом.

ID X 
1 1 
1 2
1 1
1 2
1 1
1 2
1 3
2 1
2 2
2 3
2 4
2 1
2 2
2 3
2 1
2 2

Я пытался перекодировать и данные, но он дает мне этот результат

group_by(X) %>% mutate(INDEX = seq_along())

Он дал мне этот результат.

ID X INDEX
1 1 1
1 2 1
1 1 2
1 2 2
1 1 3
1 2 3
1 3 1
2 1 4
2 2 4
2 3 2
2 4 1
2 1 5
2 2 5
2 3 3
2 1 6
2 2 6

Однако я ожидал получить этот результат.

ID X INDEX
1 1 1
1 2 1
1 1 2
1 2 2
1 1 3
1 2 3
1 3 3
2 1 4
2 2 4
2 3 4
2 4 4
2 1 5
2 2 5
2 3 5
2 1 6
2 2 6

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Сначала нужно посчитать количество «перезапусков»:

nstarts <- length(df$X[df$X == 1])

Затем вы можете назначать идентификатор каждый раз, когда счетчик перезапускается:

df$ID[df$X == 1] <- 1:nstarts

и заполните остальную часть столбца теми же значениями:

library(tidyr)
df <- fill(df, ID)
0 голосов
/ 12 июня 2019

Попробуйте это:

grouping = 0
sapply(seq(1,nrow(X)),function(x){
  if(X[x,2] == 1){
    grouping <<- grouping + 1  
  }
  return(grouping)
})
...