2012-01-25 12 views
0

ブロック内の特定のデータフレームをループし、元のデータフレームから計算されたものを含む新しいデータフレームを返す関数をまとめようとしています。 xの長さは毎回異なり、実際の問題は関数内でより多くのループを持ちます。 Rへの新しいっぽいと役立つ何かを見つけることができませんでした(私はリストを使って考えていないのに役立ちます)関数Rから複数のデータフレームを返す

func<-function(x){ 
    tmp # need to declare this here? 
    for (i in 1:dim(x)[1]){ 
     tmp[i]<-ave(x[i,]) # add things to it 
    } 
    return(tmp) 
} 
df<-cbind(rnorm(10),rnorm(10)) 
means<-func(df) 

このコード動作しますが、私はそれは私が何をしたいのか伝わる期待していません。ありがとう!

+0

あなたの質問はあまり明確ではありません。あなたのタイトルは、複数のデータフレームを返す関数を書く方法を知りたいが、あなたのコードは1つのデータフレームだけを返そうとしていることを示唆している。そして私はあなたのループ戦略のロジックを全く理解していません。おそらくあなたが実際に何をもっと詳細に説明していれば...? – joran

+0

カップルのもの。 'dim(x)[1]'は 'nrow(x)'になります。あなたは各列の平均を見つけたいと思っていますか? 'apply(x、1、mean)'はそれを行います...しかし、[plyr](http://cran.r-project.org/web/packages/plyr/index.html)を見てください。データを分割して各フレームを処理します。 – Justin

答えて

3

dfの各行をループし、計算された値のデータフレームを返すことを意味しますか?

あなたはapply機能に見てみたいことがあります:ごとの要因に基づき、いくつかの操作を実行するようにループするより複雑なために、私は強く以内パッケージplyr、および機能ddplyをお勧めします

df <- cbind(rnorm(10),rnorm(10)) 
# apply(df,1,FUN) does FUN(df[i,]) 
# e.g. mean of each row: 
apply(df,1,mean) 

。簡単な例:

df <- data.frame(gender=c('M','M','F','F'), height=c(183,176,157,168)) 
# find mean height *per gender* 
ddply(df,.(gender), function(x) c(height=mean(x$height))) 
# returns: 
    gender height 
1  F 162.5 
2  M 179.5 
+0

ありがとうございます。私は何をしたいのですか(元の質問では説明していませんでしたが、私はそれがなくても正しい方向に向けることができると期待していました)、その列の値に基づいてdfのブロックを引き出します。 – user1168246

+0

そのソートされた列では、0-1がcalc、1-2,2-3などのすべての行を取得します。毎回異なる数のブロックが存在する可能性があり、それらはすべて異なる長さになります。その複雑さと私はちょうどどこを見て良いアイデアが必要です、私はこのパッケージから始めることができます。 (ダブルコメント、申し訳ありません、新しいここに) – user1168246

+1

その場合、私はplyrパッケージがあなたが望むものを正確に行うと思う - それはあなたのデータフレームを列に基づいてブロックに分割し、各ブロックを処理する関数を書くことができます。各行がどの間隔にあるかを示す別の列を作成するだけです(つまり、各行をグループ0-1,1-2などにソートしてから、「ddply」を使用します)。 –

関連する問題