Ristrutturazione di dati in R
-
28-09-2019 - |
Domanda
Sto solo cominciando a andare oltre le nozioni di base di R e sono giunti a un punto in cui ho bisogno di aiuto. Voglio ristrutturare alcuni dati. Ecco ciò che un dataframe campione può apparire come:
ID Sex Res Contact
1 M MA ABR
1 M MA CON
1 M MA WWF
2 F FL WIT
2 F FL CON
3 X GA XYZ
Voglio i dati a guardare come:
ID SEX Res ABR CON WWF WIT XYZ
1 M MA 1 1 1 0 0
2 F FL 0 1 0 1 0
3 X GA 0 0 0 0 1
Quali sono le opzioni? Come faccio a fare questo in R?
In breve, sto cercando di mantenere i valori della colonna CONT e utilizzarli come nomi delle colonne nella cornice di dati restructred. Voglio tenere un insieme variabile di colonne costante (in th esempio di cui sopra, ho tenuto ID, sesso, e Res costante).
Inoltre, è possibile controllare i valori nei dati ristrutturati? Mi può essere utile per mantenere i dati in formato binario. Mi può essere utile alcuni dati per avere il valore sia il conteggio dei tempi esiste ogni valore di contatto per ogni ID.
Soluzione
Il pacchetto reshape
è ciò che si desidera. Documentazione qui: http://had.co.nz/reshape/ . Non a toot il mio proprio corno, ma ho anche scritto alcune note sull'uso di reshape
qui: http://www.ling.upenn.edu/~joseff/rstudy/summer2010_reshape.html
Per il vostro scopo, questo codice dovrebbe funzionare
library(reshape)
data$value <- 1
cast(data, ID + Sex + Res ~ Contact, fun = "length")
Altri suggerimenti
model.matrix
funziona alla grande (questo è stato chiesto di recente, e gappy avuto questa risposta buona ):
> model.matrix(~ factor(d$Contact) -1)
factor(d$Contact)ABR factor(d$Contact)CON factor(d$Contact)WIT factor(d$Contact)WWF factor(d$Contact)XYZ
1 1 0 0 0 0
2 0 1 0 0 0
3 0 0 0 1 0
4 0 0 1 0 0
5 0 1 0 0 0
6 0 0 0 0 1
attr(,"assign")
[1] 1 1 1 1 1
attr(,"contrasts")
attr(,"contrasts")$`factor(d$Contact)`
[1] "contr.treatment"