Совокупное число в R
Есть ли способ подсчета количества раз, когда объект появляется в столбце кумулятивно в R?
например. скажем, у меня есть столбец:
id
1
2
3
2
2
1
2
3
Это станет следующим:
id count
1 1
2 1
3 1
2 2
2 3
1 2
2 4
3 2
и т.д...
Спасибо
Ответы
Ответ 1
Функция ave
вычисляет функцию по группе.
> id <- c(1,2,3,2,2,1,2,3)
> data.frame(id,count=ave(id==id, id, FUN=cumsum))
id count
1 1 1
2 2 1
3 3 1
4 2 2
5 2 3
6 1 2
7 2 4
8 3 2
Я использую id==id
для создания вектора всех значений TRUE
, которые преобразуются в числовые при передаче в cumsum
. Вы можете заменить id==id
на rep(1,length(id))
.
Ответ 2
Вот способ получить подсчеты:
id <- c(1,2,3,2,2,1,2,3)
sapply(1:length(id),function(i)sum(id[i]==id[1:i]))
Что дает вам:
[1] 1 1 1 2 3 2 4 2
Ответ 3
Ядро данных было слишком велико, и принятый ответ продолжал рушиться. Это сработало для меня:
library(plyr)
df$ones <- 1
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones))
df$ones <- NULL