2017-01-20 4 views
0

私はlapplyを使用して、たとえば、リスト内のいくつかのデータフレームの変数の名前を変更する方法についていくつかの把握しています。しかし、私はやや複雑な操作を若干(わずかながら)行うようにしています。ルーピングまたはlapplyのデータフレームのリストのR

具体的には、いくつかのエンティティの平均成長率を計算することを検討しています。成長率は、既に算出されているので、私はちょうど、元データフレーム内のすべての数百の成長率の平均値を(含まれ、すべてのデータフレーム

for (i in 1:13) { 
    growth.type[,i] <- tapply(growth[,8+i] , growth$type, mean, na.rm = TRUE) 
} 

これは、新しいデータフレーム(growth.type)を作成の上、以下の操作をperforする必要がありますgrowth)によって、typeである。

これをいくつかのデータフレーム(growthなど)に適用して、新しいデータフレーム(growth.typeなど)に入れたいと思います。

これは意味があると思います。

答えて

1

リスト

xy <- list(growth1, growth2, growth3, ...) 

で処理し、その後、このxyオブジェクトにカスタム関数を適用したいすべてのdata.framesを置きます。

customFunction <- function(.data) { 
    for (i in 1:13) { 
    growth.type[,i] <- tapply(.data[,8+i] , .data$type, mean, na.rm = TRUE) 
    } 
    growth.type # this is the object which will be returned when function finishes 
} 

は、単に、例えば、あなたがlapplyの結果を結合する場合は、do.callを使用することができます

out <- lapply(xy, FUN = customFunction) 

を行いますdo.call("rbind", out)

+0

お返事いただきありがとうございます。私はあなたが最後の文で示唆していることは、出てくるdata.framesをどのように格納するかということだと思います。それをどうやって行うのか少し詳しく説明できますか?私が '' < - lapply(xy、FUN = customFunction) 'を実行すると、関数が1つのデータフレームだけで正常に機能していても、空のデータフレームのリストを取得します。 – pApaAPPApapapa

+0

@pApaAPPApapapa再現可能な例が最も簡単な方法です。提供できない場合は、 'growth.type'の最後の行の直前に' browser() 'を置いてみてください。実行はそこで停止し、オブジェクトを検査することができます。次の要素にコードを実行するには、コンソールに 'c'(続行)と入力します。 1行だけを実行するには、Enterキーを押すか、「n」(次へ)を入力します。 –

関連する問題