Ich habe diesen Datensatzumformen Daten basierend auf verschiedene Spalten
Country Unknown Male Female Affected Male Female Unaffected Male Female
USA 200 120 80 130 80 50 70 40 30
AU 140 80 60 60 30 30 80 50 30
‚Eingangsdaten‘ genannt und ich werde zwei Ausgangsdatenmengen hat, und es wird, wie die unten diejenigen sein, wie Sie sehen können, der Eingabedatensatz hat 3 Kategorien hier wie in den Spaltennamen 2,5,8 erwähnt.
Im Datensatz der Ausgabe 1 enthält die Spalte Kategorie die Spaltennamen in den Eingabedaten. Dann wird das Land aus der Länderspalte und der Male-Spalte einen Wert aus der Male-Spalte in der Eingabe haben.
Ähnlich wie in der Ausgabe 2 Datensatz, Kategorie und Land bleibt gleich, aber die 3. Spalte Actuals sollte Wert aus den entsprechenden Kategorien in der Eingabe, Spalten 2,5,8 haben.
Der Schlüssel hier ist, dass die Eingabe-Dataset-Struktur gleich bleibt.
Output 1
Category Country Male
Unknown USA 120
Affected USA 80
Unaffected USA 40
.
.
.
Output 2
Category Country Actuals
Unknown USA 200
Affected USA 130
Unaffected USA 70
.
.
.
Also, was ich jetzt ist auch noch ein for-Schleife jede Kategorie aus dem Eingabedatensatz der Teilmenge der Indizes mit -
Zum Beispiel inputdata[,c(1,i)]
und meinen 'i'
Variable wird 3,6,9 for output 1
und 2,5,8 for output 2
sein. Dann erstellte er eine Liste von Datenrahmen (einen für jede Kategorie) und kombinierte sie für jeden Ausgang. Ich frage mich nur, ob es andere Wege gibt, wie ich das machen kann, um es effizient zu machen.
EDIT: - Hinzufügen von meinem Code wie gewünscht,
for(i in seq(3, 9, by=3)) {
if(!exists('mylist')) mylist <- NULL
output1 <- inputdata[,c(1,i)]
if(i==3) {
output1$category <- 'unknown'
} else if (i==6) {
output1$category <- 'affected'
} else
output1$category <- 'unaffected'
mylist <- c(mylist,output1)
rm(output1)
}
for(i in seq(2, 8, by=3)) {
if(!exists('mylist')) mylist <- NULL
output2 <- inputdata[,c(1,i)]
if(i==3) {
output2$category <- 'unknown'
} else if (i==6) {
output2$category <- 'affected'
} else
output2$category <- 'unaffected'
mylist <- c(mylist,output2)
rm(output2)
}
Bitte lassen Sie mich wissen, ob es etwas unklar ist.
Bitte senden Sie den Code, den Sie versucht. – Sotos
Hinzugefügt hier. :) –
Aber Sie haben Spalten mit dem gleichen Namen. Spaltennamen müssen eindeutig sein. Können Sie diese Tabelle in R als data.frame laden, wobei diese Spaltennamen beibehalten werden? – Osdorp