2016-04-25 18 views
-3

Wie erstelle ich viele neue Datenrahmen in R, die Teilmengen eines viel größeren Datenrahmens sind. Der ursprüngliche Datenrahmen hat 15 Spalten (zB: ao) - Ich möchte jede Teilmenge durch den Wert der dritten Spalte (zB: eine Teilmenge ist nur c == '111_11111', die nächste Teilmenge ist nur c == '111_10101') (die Werte von Spalte c sind nicht sequentiell).Funktion zum Erstellen neuer Subsetting-Datenrahmen

Bisher habe ich folgendes:

data <- c([values of column c]) 
function1.all <- function(x){ 
    a <- numeric(length(x)) 
    for(i in seq_along(x)){ 
    a <- subset(main_data_frame,c==i) 
     } 
    a 
    } 
+3

Werfen Sie einen Blick auf "Split" vielleicht. – Frank

+0

Was willst du mit ihnen machen? Sehen Sie sich die plyr- oder dplyr-Pakete an, um einen data.frame durch eine Variable zu teilen und dann alle möglichen Dinge zu tun. – Nova

Antwort

0

Ich würde dies versuchen, wenn Sie keine Faktoren in der c-Spalte verwenden, und Sie g und eine Liste als Ausgabe. Ich bevorzuge Listen für die Speicherung relativ großer Mengen von Datenrahmen, da Sie die Liste immer größer machen können, anstatt eine neue Variable zu erstellen.

Ich werde bei jedem Schritt des Codes im Detail gehen:

die eindeutigen Werte in Ihrer ID-Spalte finden. In Ihrem Fall mit dem Format (### _ #####).

un <- unique(main_data_frame[,"c"]) 

Erstellen Sie eine Liste, in der alle Ihre Datenrahmen gespeichert werden. Die Länge der Liste entspricht der Anzahl eindeutiger IDs, die ebenfalls der Anzahl eindeutiger Datenrahmen entspricht.

many.frames <- vector(mode = "list", length = length(un)) 

Zuletzt iterieren Sie die eindeutige Liste und ziehen Sie die Elemente aus dem main_data_frame mit Hilfe der Teilmengenfunktion. Sie ziehen im Grunde alle Zeilen mit Ihrer eindeutigen ID in diesen neuen Datenrahmen.

for (i in 1:length(un)) { 
    many.frames[[i]] <- subset(main_data_frame, c == un[i]) 
} 

Sie können auch verwenden:

many.frames[[i]] <- main_data_frame[,main_data_frame$c==un[i]] 

Um einen von ihnen zugreifen, können Sie many.frames verwenden [[n]], wobei n der Index der ID. Wenn Sie mit der ID, many.frames [["### _ #####"]] arbeiten möchten, fügen Sie sie einfach in Anführungszeichen ein.

+1

Obwohl dieser Code die Frage beantworten kann, zusätzliche Kontext in Bezug auf _why_ und/oder _how_ es antwortet die Frage würde erheblich verbessern seine langfristigen Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

+0

Die Werte der Spalte c sind formatiert ### _ ##### zum Beispiel 111_12123 –

+0

Vielen Dank Toby, bitte lassen Sie mich wissen, wenn das alles klar ist. Amanda, Sie sollten in der Lage sein, mit dieser Untergruppe auf jeden data.frame zuzugreifen: many.frames [["111_11111"]] – Heymans

-1

Datenrahmen Unter der Annahme, heißt df und die entsprechende Spalte wird c genannt:

values <- unique(df$c) 

for (i in 1:length(values)) { 
    assign(paste0("df", i), df[df$c == values[i],]) 
} 

Dies erzeugt so viele Datenrahmen, wie es eindeutige Werte in df $ c, jede nummerierte df1, df2 usw.

+0

Dies zeigt nur die ersten beiden Spalten des Datenrahmens. Ich brauche die Subsetting-Datenrahmen, um alle 15 Spalten mit den Werten anzuzeigen, die c == "jedem eindeutigen Wert" entsprechen. –

+0

Nein, alle Spalten werden in jedem df1, df2 usw. gespeichert. Können Sie das nochmal überprüfen? – radiumhead

Verwandte Themen