2013-03-07 20 views
5

Il mio set di dati comprende tre trattamenti (C, S ed E) per individuo. Sembra qualcosa del genereaggiungi una nuova colonna che identifica le persone

Year Cultivar Site Distance Plant Treat yield1 yield2 
1 2011 Blue  ABR 0m   1  C  0.879 1.5 
2 2011 Blue  ABR 0m   1  S  0.384 2.3 
3 2011 Blue  ABR 0m   1  E  0.03  0.5 
4 2011 Blue  ABR 0m   2  C  0.923 1.2 
5 2011 Blue  ABR 0m   2  S  0.344 0.5 
6 2011 Blue  ABR 0m   2  E  0.07  0.7 
7 2011 Blue  ABR 50m  1  C  0.255 3.4 
8 2011 Blue  ABR 50m  1  S  1.00  2.4 
9 2011 Blue  ABR 50m  1  E  0.1  0.9 
. 
. 
. 

ho due anni di dati, 2 cultivar, 15 siti, 3 distanze per sito, e 10 piante per la distanza. Fondamentalmente ho molti dati (> 1400 linee). Quello che voglio essere in grado di fare è aggiungere una nuova colonna che assegni un nuovo numero a ciascuno dei singoli nello studio. Voglio che i miei dati finiscano in questo modo.

Individual Year Cultivar Site Distance Plant Treat yield1 yield2 
1 1   2011 Blue  ABR 0m   1  C  0.879 1.5 
2 1   2011 Blue  ABR 0m   1  S  0.384 2.3 
3 1   2011 Blue  ABR 0m   1  E  0.03  0.5 
4 2   2011 Blue  ABR 0m   2  C  0.923 1.2 
5 2   2011 Blue  ABR 0m   2  S  0.344 0.5 
6 2   2011 Blue  ABR 0m   2  E  0.07  0.7 
7 3   2011 Blue  ABR 50m  1  C  0.255 3.4 
8 3   2011 Blue  ABR 50m  1  S  1.00  2.4 
9 3   2011 Blue  ABR 50m  1  E  0.1  0.9 
. 
. 
. 

Sono relativamente di nuovo a R quindi mi scuso se questo è qualcosa che dovrebbe essere relativamente facile da fare. So che dovrei essere in grado di "trovare" ogni individuo come una combinazione unica di pianta * distanza * sito * cultivar * anno, ma onestamente non ho idea di come farei a codificarlo, e non sono riuscito a trovare qualsiasi pagina di aiuto simile.

Qualsiasi suggerimento sarebbe molto apprezzato!

+0

Si prega di notare che è possibile premere il tasto "verifica" accanto a qualsiasi soluzione per risolvere il problema, generando uno stimolo elettrico nel cervello dell'utente designato che viene interpretato come feedback positivo. . . (da Wikipedia) "Inoltre, i neuroni della dopamina sono depressi quando viene omessa la ricompensa prevista." –

risposta

4

Ecco una soluzione che utilizza plyr:

library(plyr) 
df$id <- id(df[c("Year","Cultivar", "Site", "Distance", "Plant")], drop=TRUE) 
#Add whichever columns contain the unique combination you require 
df 

Year Cultivar Site Distance Plant Treat yield1 yield2 id 
1 2011  Blue ABR  0m  1  C 0.879 1.5 1 
2 2011  Blue ABR  0m  1  S 0.384 2.3 1 
3 2011  Blue ABR  0m  1  E 0.030 0.5 1 
4 2011  Blue ABR  0m  2  C 0.923 1.2 2 
5 2011  Blue ABR  0m  2  S 0.344 0.5 2 
6 2011  Blue ABR  0m  2  E 0.070 0.7 2 
7 2011  Blue ABR  50m  1  C 0.255 3.4 3 
8 2011  Blue ABR  50m  1  S 1.000 2.4 3 
9 2011  Blue ABR  50m  1  E 0.100 0.9 3 
+0

Grazie mille @alexwhan !! Funziona perfettamente :) – melanopygus

4

E una soluzione data.table utilizzando .GRP

.GRP è un numero intero, lunghezza 1, contenente un contatore gruppo semplice. 1 per il 1 ° gruppo, 2 per il secondo, ecc

library(data.table) 
DT <- data.table(df) 

DT[,grp :=.GRP,by = list(Year,Cultivar, Site, Distance, Plant)] 
2

Una soluzione senza l'utilizzo di pacchetti extra:

df$id <- factor(apply(df[,c("Year","Cultivar", "Site", "Distance", "Plant")], 1, paste, collapse="")) 
levels(df$id) <- 1:length(levels(df$id)) 
+0

o semplicemente 'as.numeric (df $ id)'? – mnel

1

Non è la soluzione migliore qui ma una soluzione:

library(qdap) 
df$id <- as.numeric(factor(paste2(df[qcv(terms="Year Cultivar Site Distance Plant")]))) 
Problemi correlati