originale cornice di dati: Recode fattore categorico con N categorie in N colonne binarie
v1 = sample(letters[1:3], 10, replace=TRUE)
v2 = sample(letters[1:3], 10, replace=TRUE)
df = data.frame(v1,v2)
df
v1 v2 1 b c 2 a a 3 c c 4 b a 5 c c 6 c b 7 a a 8 a b 9 a c 10 a b
Nuovo telaio dati:
new_df = data.frame(row.names=rownames(df))
for (i in colnames(df)) {
for (x in letters[1:3]) {
#new_df[x] = as.numeric(df[i] == x)
new_df[paste0(i, "_", x)] = as.numeric(df[i] == x)
}
}
v1_a v1_b v1_c v2_a v2_b v2_c 1 0 1 0 0 0 1 2 1 0 0 1 0 0 3 0 0 1 0 0 1 4 0 1 0 1 0 0 5 0 0 1 0 0 1 6 0 0 1 0 1 0 7 1 0 0 1 0 0 8 1 0 0 0 1 0 9 1 0 0 0 0 1 10 1 0 0 0 1 0
Per piccoli gruppi di dati questo va bene, ma diventa sl ow per dataset molto più grandi.
Qualcuno sa di un modo per farlo senza utilizzare il loop?
Il tuo primo frame di dati aveva due variabili, ma sembra che tu abbia convertito solo il secondo. Puoi chiarirlo un po '? – joran
stai sovrascrivendo i tuoi dati. Dovrebbe avere 6 colonne in uscita. – Arun
Scusate, è stato un errore da parte mia - l'ho risolto nel codice sopra. Ci dovrebbero essere tre nuove colonne per ogni colonna originale nell'esempio sopra. Grazie per averlo capito! –