Как подсчитать и идентифицировать эквивалентные группы в рамках кадра данных в R - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть простой фрейм данных, состоящий из 0 и 1

library(dplyr)      
d <- data.frame(x=c(0,0,1,1,0,1,1,1,0,0,1))

Я хочу, чтобы каждая группа из 1 идентифицировалась по уникальному идентификатору:

   x id
1  0  0
2  0  0
3  1  1
4  1  1
5  0  0
6  1  2
7  1  2
8  1  2
9  0  0
10 0  0
11 1  3

Это можно решить с помощью простого цикла, которого я хочу избежать. Я пробовал с group_indice (dplyr), na.locf (zoo) и cumsum и до сих пор не вижу пути до конца.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

вы можете сделать это с cumsum и diff

G1 = cumsum(c(d$x[1] == 1, diff(d$x) == 1))
d$id = ifelse(d$x==1, G1, 0)
d
   x id
1  0  0
2  0  0
3  1  1
4  1  1
5  0  0
6  1  2
7  1  2
8  1  2
9  0  0
10 0  0
11 1  3

вам нужна часть d$x[1] == 1, если первый элемент x равен 1.

0 голосов
/ 18 сентября 2018

Простой базовый метод с использованием rle:

r <- rle(d$x)
r$values[r$values == 1] <- seq_len(sum(r$values == 1))
d$id <- rep(r$values,times = r$lengths)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...