Ich habe einige Probleme, meine data.frame
von einem breiten Tisch in einen langen Tisch umzuwandeln . Im Moment sieht es so aus:
Code Country 1950 1951 1952 1953 1954
AFG Afghanistan 20,249 21,352 22,532 23,557 24,555
ALB Albania 8,097 8,986 10,058 11,123 12,246
Jetzt möchte ich dies data.frame
in eine lange verwandeln data.frame
. Etwas wie das:
Code Country Year Value
AFG Afghanistan 1950 20,249
AFG Afghanistan 1951 21,352
AFG Afghanistan 1952 22,532
AFG Afghanistan 1953 23,557
AFG Afghanistan 1954 24,555
ALB Albania 1950 8,097
ALB Albania 1951 8,986
ALB Albania 1952 10,058
ALB Albania 1953 11,123
ALB Albania 1954 12,246
Ich habe mir die melt()
und die reshape()
Funktionen angesehen und bereits versucht, sie zu verwenden, wie einige Leute in ähnlichen Fragen vorgeschlagen haben. Bisher bekomme ich jedoch nur unordentliche Ergebnisse.
Wenn es möglich ist, würde ich es gerne mit der reshape()
Funktion machen, da sie etwas besser aussieht.
Antworten:
reshape()
zu, wie dauert eine Weile , gewöhnungsmelt
/cast
. Hier ist eine Lösung mit Umformung, vorausgesetzt, Ihr Datenrahmen heißtd
:quelle
Drei alternative Lösungen:
1) Mit Datentabelle::
Sie können dieselbe
melt
Funktion wie imreshape2
Paket verwenden (eine erweiterte und verbesserte Implementierung).melt
fromdata.table
hat auch mehr Parameter als diemelt
-Funktion vonreshape2
. Sie können beispielsweise auch den Namen der Variablenspalte angeben:was gibt:
Einige alternative Notationen:
2) Mit tidyr::
Einige alternative Notationen:
3) Mit umformen2::
Einige alternative Notationen, die das gleiche Ergebnis liefern:
ANMERKUNGEN:
NA
Werte ausschließen möchten, können Sie sowohlna.rm = TRUE
diemelt
als auch diegather
Funktionen hinzufügen .Ein weiteres Problem mit den Daten besteht darin, dass die Werte von R als Zeichenwerte gelesen werden (als Ergebnis der
,
in den Zahlen). Sie können das mitgsub
und reparierenas.numeric
:Oder direkt mit
data.table
oderdplyr
:Daten:
quelle
id
undtime
in Ihren Datenrahmen ein, undmelt
sagen Sie nicht, was Sie in diesem Fall tun möchten.id.vars
als auch das anmeasure.vars
.id.vars
und dasmeasure.vars
kann in der ersten Alternative angegeben werden, sorry für das Durcheinander, es ist meine Schuld.-c(var1, var2)
...-c(var1, var2)
dass diese Variablen beim Transformieren der Daten von einem breiten in ein langes Format werden.Verwenden des Umformungspakets :
quelle
Mit
tidyr_1.0.0
ist eine andere Optionpivot_longer
Daten
quelle
gather
in den Ruhestand versetzt undpivot_longer
ist nun der richtige Weg, dies zu erreichen.Da diese Antwort mit markiert ist r-faqIch hielt es für nützlich, eine andere Alternative von Basis R zu teilen :
stack
.Beachten Sie jedoch, dass
stack
dies mitfactor
s nicht funktioniert - es funktioniert nur, wenn dies der Fallis.vector
istTRUE
, und aus der Dokumentation füris.vector
finden wir Folgendes:Ich verwende die Beispieldaten aus der Antwort von @ Jaap , wobei die Werte in den Jahresspalten
factor
s sind.Hier ist der
stack
Ansatz:quelle
Hier ist ein weiteres Beispiel, das die Verwendung von
gather
from zeigttidyr
. Sie können die Spalten auswählen,gather
indem Sie sie entweder einzeln entfernen (wie hier) oder indem Sie die gewünschten Jahre explizit angeben.Beachten Sie, dass
check.names = FALSE
ich zur Behandlung der Kommas (und der X-Zeichen, wenn diese nicht gesetzt sind) auch diedplyr
Mutation mitparse_number
von verwendereadr
, um die Textwerte wieder in Zahlen umzuwandeln. Diese sind alle Teil dertidyverse
und können daher zusammen mit geladen werdenlibrary(tidyverse)
Kehrt zurück:
quelle
Hier ist ein sqldf Lösung:
Um die Abfrage durchzuführen, ohne alles einzugeben, können Sie Folgendes verwenden:
Vielen Dank an G. Grothendieck für die Umsetzung.
Leider glaube ich das nicht
PIVOT
undUNPIVOT
würde dafür arbeitenR
SQLite
. Wenn Sie Ihre Anfrage differenzierter schreiben möchten, können Sie sich auch die folgenden Beiträge ansehen:Verwenden
sprintf
von SQL-Abfragen oder Übergeben von Variablen ansqldf
quelle
Sie können auch das
cdata
Paket verwenden, das das Konzept der (Transformations-) Steuertabelle verwendet:Ich erkunde gerade dieses Paket und finde es ziemlich zugänglich. Es ist für viel kompliziertere Transformationen ausgelegt und beinhaltet die Rücktransformation. Es ist ein Tutorial verfügbar.
quelle