2017-05-11 5 views
1

Angenommen, ich habe einen Datenrahmen mit 10 Spalten, wobei jede der 10 Spalten eine separate Zeitreihe darstellt.Konvertieren Sie jede Spalte im Datenframe in einen separaten Datenrahmen

Ich möchte jede Zeitreihe (oder jede Spalte des Datenrahmens) in einem separaten Datenrahmen speichern.

Ich habe versucht mit assign ("Spaltenname", df [, i]), wobei ich eine Variable in einer for-Schleife von 1 bis Anzahl der Spalten ist. Dies führt zu Zeichenvektoren jeder Spalte, wo ich stattdessen Datenrahmen benötige.

Irgendeine Idee, wie ich fortfahren könnte?

Antwort

0
# Create a test dataframe 
df <- data.frame(c(1:3), c(3:5), c(8:10)) 
colnames(df) <- c("col1","col2","col3") 

#### VERSION 1 #### 
# Creates a new dataframe from each column, but lose the original column names in the new dataframes 
for(i in 1:ncol(df)) 
    {assign(colnames(df)[i], data.frame(df[,i]))} 

#### VERSION 2 #### 
# Creates a new dataframe from each column, maintains the original column names in the new dataframes 
for(i in 1:ncol(df)) 
{temp <- data.frame(df[,i]) 
colnames(temp) <- colnames(df)[i] 
assign(colnames(df)[i], temp) 
rm(temp) 
} 
+0

Alternativ kann, wenn die OP bereit ist 'assign' zu verzichten (die so ziemlich universell mutlos ist), gibt es' split.default (df, seq_along (df)) 'oder' split.default (df, Namen (df)) ' – Frank

+1

split.default ist definitiv eine gute Alternative. Denken Sie daran, wenn Sie die Aufteilung einem neuen Objekt 'x <- split.default (df, names (df))' zuweisen, dass die resultierenden Datenframes in einer Liste in diesem Objekt gespeichert werden und dann durch ihren Index referenziert werden können in der Liste zB: mit der Indexnummer des Datenrahmens 'x [2]' oder mit dem Namen des Datenrahmens 'x [" col2 "]' –

+1

Eigentlich 'x [[" col2 "]]', oder? 'x [" col2 "]' wird eine Teilmenge der Liste sein, nicht ein Element davon. – Frank

Verwandte Themen