Il set di dati contiene tre variabili: id, sesso e grado (fattore).Frequenza di righe per ID
mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
Per ogni ID, ho bisogno di vedere quanti gradi unico che abbiamo e quindi creare una nuova colonna (chiamata N) per registrare la frequenza di grado. Ad esempio, per ID = 1, abbiamo cinque valori univoci per "grado", quindi N = 4; per ID = 2, abbiamo due valori univoci per "grado", quindi N = 2; per ID = 4, abbiamo due valori unici per "grado" (ignora NA), quindi N = 2.
Il set di dati finale è
mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
mydata$N <- c(5,5,5,5,5,2,2,2,2,1,1,1,1,2,2,2,2,2)
Questo sembrerebbe come un lavoro per un 'ciclo for', facendo un'iterazione per ogni ID valore unico e, eventualmente, un ciclo 'for' annidato per ogni grado unico. – giraffehere
I loop non sono la risposta in R. A meno che non lo siano (il che non è il caso qui). – Heroka
Mi chiedevo anche se sarebbe stato possibile utilizzare * dplyr * e fornire i conteggi per gruppi univoci. – Konrad