2016-06-17 15 views
1

複数のデータフレームに新しい列を追加しようとしていて、元のデータフレームを新しいデータフレームに置き換えようとしています。新しいデータフレームを作成する方法は次のとおりです。リストを分割して個別にオブジェクトを保存する方法は?

df1 <- data.frame(X1=c(1,2,3),X2=c(1,2,3)) 
df2 <- data.frame(X1=c(4,5,6),X2=c(4,5,6)) 

groups <- list(df1,df2) 
groups <- lapply(groups,function(x) cbind(x,X3=x[,1]+x[,2])) 
groups 

[[1]] 
    X1 X2 X3 
1 1 1 2 
2 2 2 4 
3 3 3 6 

[[2]] 
    X1 X2 X3 
1 4 4 8 
2 5 5 10 
3 6 6 12 

新しいデータフレームの作成方法に満足しています。私が悩んでいるのは、私のgroupsリストを分割してから、リスト要素を元のデータフレームに戻して保存することです。

所望の出力

基本的に、私はdf1,df2 <- groups[[1]],groups[[2]]のような何かをしたいが、それは有効でない構文上はもちろんです。私は2つ以上のデータフレームを持っています。なぜなら、単純にN行のコードを入力するよりも、よりプログラム的なアプローチを望んでいるからです。

+2

リスト内で同じ構造のdata.framesを保持することは、通常、 'lapply'や他のツールを使って作業することができるので、Rではかなり良いアイデアです。便利なヒントについては、[この質問](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)のgregorの回答を参照してください。 'names(groups)< - c(" df1 "、" df2 ")'のように、アクセスを容易にするためにリスト項目に名前を追加することもできます。 – lmo

+0

ありがとう、それは非常に有益なスレッドです。私はそのアプローチを実装しようとします。誰かがまだ気にしていれば私の元の質問についてはまだ不思議です。 – ZachTurn

答えて

3
for (i in 1:length(groups)){ 
    assign(paste("df",i,sep=""),as.data.frame(groups[[i]])) 
} 

とする必要があります。試してみてください。

+0

閉じる。 アサイン(paste0( "df"、i)、as.data.frame(groups [[i]])) } ' –

+0

ありがとう、それを修正しました – Rockbar

+0

ありがとう、あなたの投稿は私自身の答えに私を導くのに役立った。あなたのソリューションは、データフレームに順番に番号が付けられているときに機能しますが、名前付け規則に対応する回答を投稿します。 – ZachTurn

1

@Rockbarは、同様に、一般的なソリューションに私を導いた:

for(i in 1:length(groups)){ 
    assign(names(groups)[i],as.data.frame(groups[[i]])) 
} 

> df1 
    X1 X2 X3 
1 1 1 2 
2 2 2 4 
3 3 3 6 
> df2 
    x1 X3 X3 
1 4 4 8 
2 5 5 10 
3 6 6 12 

私はこれだけの作品が、リスト内のオブジェクトはすべての名前が付けられている場合に注意すべきです。私にこれを案内してくれてありがとう@Rockbar。

関連する問題