Увеличивать номер строки в группе каждый раз, когда он «появляется» в R - PullRequest
0 голосов
/ 03 сентября 2018

Возможно ли в R создать столбец, который увеличивается с шагом 1 каждый раз, когда снова появляется групповой уровень другого столбца, т. Е.

Посмотреть (х)

vents    Group     Number of times present
    1           1               1
    2           1               1
    3           1               1
    4           2               1
    5           1               2
    6           1               2
    7           2               2
    8           2               2 
    9           3               1
    10          2               3
    11          3               2
    12          3               2
    13          2               4
    14          1               3
    15          1               3

(поэтому желаемым результатом будет столбец «Количество присутствующих раз»

Предполагая, что приведенный выше пример является моим фреймом данных, я попытался:

x <- within(x, {Number of times present<- cumsum(c(1,abs(diff(Group))))})

Однако это только увеличивается на единицу каждый раз, когда изменяется уровень группы (независимо от того, к какой группе он относится, и прошлой истории числа раз, когда он ранее «появлялся»

Любая помощь будет принята с благодарностью (мой фактический фрейм данных очень большой, но я предполагаю, что цикл for может быть способом продвижения вперед?

Thankyou

1 Ответ

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

Я решаю это с помощью функции rle и цикла 1 for:

x <- data.frame(Group = c(1, 1, 1, 2, 1, 1, 2, 2, 3, 2, 3, 3, 2, 1, 1))

rle(x$Group)
# Run Length Encoding
#  lengths: int [1:9] 3 1 2 2 1 1 2 1 2
#  values : num [1:9] 1 2 1 2 3 2 3 2 1

y1 <- rle(x$Group)$values
y2 <- rle(x$Group)$lengths
z <- c()
for(i in unique(y1)){
    z[y1 == i] <- 1 : sum(y1 == i)
}

rep(z, y2)
# [1] 1 1 1 1 2 2 2 2 1 3 2 2 4 3 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...