2017-05-11 8 views
1

10個の列を持つデータフレームがあるとします。データフレーム内の各列を個別のデータフレームに変換する

各timeseries(またはデータフレームの各列)を個別のデータフレームに格納したいとします。

私はassign( "columnname"、df [、i])を使用しようとしました。ここで、iは1から複数の列を実行するforループの変数です。この結果、各列の文字ベクトルが生成され、代わりにデータフレームが必要になります。

どうすればいいですか?

答えて

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

代わりに、OPは '(ほとんど普遍的に推奨されて)assign'を見送るために喜んであれば、' split.default(DF、seq_along(DF)) 'や' split.defaultあります(DF、名前(df)) ' – Frank

+1

split.defaultは間違いなく素晴らしい選択肢です。分割結果を新しいオブジェクト 'x < - split.default(df、names(df))'に代入すると、得られたデータフレームはそのオブジェクトのリストの中に保存され、そのインデックスで参照することができますつまり、データフレーム 'x [2]'のインデックス番号を使うか、データフレーム 'x [" col2 "]' –

+1

の名前を使って実際に 'x [[" col2 "]]'でしょうか? 'x [" col2 "]'はリストのサブセットであり、その要素ではありません。 – Frank

関連する問題