Ich habe einen großen Datenrahmen mit 41040 Obs. und 20 Variablen. Hier werde ich den Mock-Datensatz vereinfachen, so dass es einfacher ist, die Frage zu verstehen.Umstrukturierung kompliziert und großen Datenframe
Was ich habe:
rm(list = ls())
variable <- rep(c('var1', 'var1_2', 'var1_3', 'var1_4'), 5)
group <- as.factor(rep(c('county1', 'county2', 'county3', 'county4'), 5))
year <- rep(c(2000:2004), 4)
month <- c(rep(1:12, 1), 1:8)
value1 <- sample(1:10000, 20)
value2 <- sample(1:10000, 20)
value3 <- sample(1:10000, 20)
mydata <- data.frame(variable, group, year, month, value1, value2, value3)
head(mydata)
variable group year month value1 value2 value3
1 var1 county1 2000 1 4848 4759 6029
2 var1_2 county2 2001 2 7624 3486 6745
3 var1_3 county3 2002 3 4612 9155 4266
4 var1_4 county4 2003 4 1496 2420 9451
5 var1 county1 2004 5 6739 4312 5577
6 var1_2 county2 2000 6 5127 5030 5479
Was ich von dieser wollen, ist eine andere data.frame bekommen, wo Werte nicht über Landkreise, Jahre oder Monate vermasselt, aber jede Spalte repräsentieren eine Variable aus die variable Spalte. Um zu klären, auf dem gleiche Beispiel, das ich für den schnellsten Weg suche diese zu bekommen:
var1 <- c(t(mydata[1, 5:7]))
var1_2 <- c(t(mydata[2, 5:7]))
var1_3 <- c(t(mydata[3, 5:7]))
var1_4 <- c(t(mydata[4, 5:7]))
group2 <- rep('county1', 3)
year2 <- rep(2000, 3)
month2 <- rep(1, 3)
mydata2 <- data.frame(group2, year2, month2, var1, var1_2, var1_3, var1_4)
head(mydata2)
group2 year2 month2 var1 var1_2 var1_3 var1_4
county1 2000 1 4848 7624 4612 1496
county1 2000 1 4759 3486 9155 2420
county1 2000 1 6029 6745 4266 9451
Nachdem alle Werte für county1, Jahr 2000 und Monat 1 geschrieben werden, ich mag es Monat 2, Jahr 2000 gehen und county1, als Monat 3 usw. Nachdem alle Monate fertig sind, will ich das Jahr 2001 für County 1 usw., und am Ende Umzug nach county2.
Ich versuchte verschiedene Möglichkeiten mit melt(), dcast(), stack(), unstack(), gather() and spread()
ohne Erfolg.