2012-04-05 15 views
17

Esiste un modo per contare il numero di volte in cui un oggetto appare in una colonna cumulativamente in R?Conteggio cumulativo in R

ad es. Dire che ho la colonna:

id 
1 
2 
3 
2 
2 
1 
2 
3 

Questo diventerebbe:

id count 
1  1 
2  1 
3  1 
2  2 
2  3 
1  2 
2  4 
3  2 

ecc ...

Grazie

risposta

21

La funzione ave calcola una funzione per gruppo.

> 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 

che uso id==id per creare un vettore di tutti TRUE valori, che vengono convertite in numerico quando passato a cumsum. È possibile sostituire id==id con rep(1,length(id)).

7

Ecco un modo per ottenere i conteggi:

id <- c(1,2,3,2,2,1,2,3) 

sapply(1:length(id),function(i)sum(id[i]==id[1:i])) 

Che ti dà:

[1] 1 1 1 2 3 2 4 2 
+1

@ user1165199: se questo è il modo migliore per rispondere alla domanda, fare clic sul segno di spunta. –

+0

Questo è un asso. Anche legarlo in un oggetto data.table è semplice. – DaveRGP

2

Il dataframe che avevo era troppo grande e la risposta accettata continuava a bloccarsi. Questo ha funzionato per me:

library(plyr) 
df$ones <- 1 
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones)) 
df$ones <- NULL 
Problemi correlati