R создать групповую переменную на основе порядка и условия строки - PullRequest
2 голосов
/ 21 января 2020

У меня есть фрейм данных, содержащий несколько групп, которые явно не указаны. Вместо этого новая группа всегда начинается, когда type == 1, и одинакова для следующих строк, содержащих type == 2. Количество строк в группе может варьироваться.

Как я могу явно создать новую переменную на основе порядка другого столбца? Группы, конечно, должны быть эксклюзивными.

Мои данные:

df <- data.frame(type = c(1,2,2,1,2,1,2,2,2,1),
                 stand = 1:10)

Ожидаемый вывод с новой группой myGroup:

   type stand myGroup
1     1     1       a
2     2     2       a
3     2     3       a
4     1     4       b
5     2     5       b
6     1     6       c
7     2     7       c
8     2     8       c
9     2     9       c
10    1    10       d

Ответы [ 2 ]

4 голосов
/ 21 января 2020

Один из вариантов может быть:

with(df, letters[cumsum(type == 1)])

[1] "a" "a" "a" "b" "b" "c" "c" "c" "c" "d"
0 голосов
/ 21 января 2020

Вот еще один вариант, использующий rep() + diff(), но не такой простой, как подход @ tmfmnk

idx <- which(df$type==1)
v <- diff(which(df$type==1))
df$myGroup <- rep(letters[seq(idx)],c(v <- diff(which(df$type==1)),nrow(df)-sum(v)))

такой, что

> df
   type stand myGroup
1     1     1       a
2     2     2       a
3     2     3       a
4     1     4       b
5     2     5       b
6     1     6       c
7     2     7       c
8     2     8       c
9     2     9       c
10    1    10       d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...