Ho un enorme set di dati in cui c'è una colonna che include diversi valori per ogni soggetto (riga). Ecco un dataframe campione semplificata:Divisione di una colonna in più colonne
data <- data.frame(subject = c(1:8), sex = c(1, 2, 2, 1, 2, 1, 1, 2),
age = c(35, 29, 31, 46, 64, 57, 49, 58),
v1 = c("2", "0", "3,5", "2 1", "A,4", "B,1,C", "A and B,3", "5, 6 A or C"))
> data
subject sex age v1
1 1 1 35 2
2 2 2 29 0
3 3 2 31 3,5 # separated by a comma
4 4 1 46 2 1 # separated by a blank space
5 5 2 64 A,4
6 6 1 57 B,1,C
7 7 1 49 A and B,3
8 8 2 58 5, 6 A or C
Prima di tutto voglio togliere le lettere (A
, B
, A and B
, ...) nella quarta colonna (v1
), e quindi dividere la quarta colonna in più colonne proprio come questo :
subject sex age x1 x2 x3 x4 x5 x6
1 1 1 35 0 1 0 0 0 0
2 2 2 29 0 0 0 0 0 0
3 3 2 31 0 0 1 0 1 0
4 4 1 46 1 1 0 0 0 0
5 5 2 64 0 0 0 1 0 0
6 6 1 57 1 0 0 0 0 0
7 7 1 49 0 0 1 0 0 0
8 8 2 58 0 0 0 0 1 1
dove il primo soggetto prende 1 a x2, perché ci vuole 2 a v1 nel dataset originale, il terzo soggetto prende 1 sia a x3 e X5, perché ci vuole 3 e 5 al v1 nel dataset originale, e così via.
Apprezzerei qualsiasi aiuto su questa domanda. Molte grazie.
Grazie mille. Il tuo script R funziona molto bene. – user187454
Grazie per il tuo aggiornamento. Ho una domanda aggiuntiva. Qui fornisco solo un semplice set di dati in cui v1 assume il valore massimo "6". Nei miei dati reali, dato che è enorme, c'è un modo semplice per determinare automaticamente il valore massimo di v1 invece di specificarlo da solo? Grazie. – user187454
Grazie mille, sei molto utile. – user187454