La mia domanda è: ho un frame di dati con alcune variabili fattore. Ora voglio assegnare un nuovo vettore a questo frame di dati, che crea un indice per ogni sottoinsieme di tali variabili fattoriali.Come assegnare un contatore a un sottoinsieme specifico di un data.frame definito da una combinazione di fattori?
data <-data.frame(fac1=factor(rep(1:2,5)), fac2=sample(letters[1:3],10,rep=T))
mi dà qualcosa di simile:
fac1 fac2
1 1 a
2 2 c
3 1 b
4 2 a
5 1 c
6 2 b
7 1 a
8 2 a
9 1 b
10 2 c
E quello che voglio è un contatore combinazione che conta il verificarsi di ogni combinazione fattore. Ti piace questa
fac1 fac2 counter
1 1 a 1
2 2 c 1
3 1 b 1
4 2 a 1
5 1 c 1
6 2 b 1
7 1 a 2
8 2 a 2
9 1 b 2
10 1 a 3
Finora ho pensato di usare Tapply per ottenere il contatore su tutti Factor-combinazioni, che funziona bene
counter <-tapply(data$fac1, list(data$fac1,data$fac2), function(x) 1:length(x))
Ma io non so come posso assegnare l'elenco dei contatori (ad esempio, non in elenco) alle combinazioni nel frame di dati senza utilizzare looping inefficiente :)
Ha bisogno di essere in ordine o vuoi semplicemente conta netti? Se vuoi solo conteggi, la tabella (incolla (dati $ fac1, data $ fac2, sep = "-")) potrebbe aiutare. – screechOwl
Ciao! All'interno di ciascuna combinazione fac1 x fac2 l'ordine conta. (Si può pensare a volte che una persona "fac1" ha visto la lettera "fac2") – JBJ
Puoi usare la stessa strategia di base, ma passare da 'tapply' a' ddply' da ** plyr **, o se il tuo i dati sono enormi e le prestazioni sono un problema, 'data.table'. – joran