2016-11-03 9 views
-2

リストリストデータフレームフォーマットに入れる必要があるデータフレーム(または値)のリストがありますリスト - データフレーム形式下記の簡単な例をご覧ください。データフレームのリストをデータフレームのリストにする方法

library(plyr) 

my_function= function(df){ 
    means = mean(df$mpg) 
    sds = sd(df$mpg) 
    # or 
    #  means = mtcars * rnorm(1) 
    #  sds = cars * rnorm(1) 
    output = list(MEAN = means, SD = sds) 
    return(output) 
} 

list_of_dfs=plyr::dlply(.data = mtcars, .variables ='cyl') 
output = lapply(list_of_dfs, my_function) 

今私はそれを集約したいので、CYL = 4/6月8日のためのすべてのSD値は、1つのデータフレームと第二のデータフレーム内MEAN値です。

私はdo.call(rbind, output)を試しましたが、わかりません。

はい、ここでグループ化することができます。これは単なる例です。リストの各値は、計算された出力ではなく実際のデータフレームと考えることができます。

+0

あなたは、データセット内のすべてのレベルの 'cyl'に対して' mpg'の平均とsdを計算したいとお考えですか?もしそうなら、より効率的な方法があります。 – jdobres

+2

ねえ、おそらく実際に有効なRコードを投稿することで、実際にあなたを助けることができます。 – hrbrmstr

+0

私はそれを申し訳ありません男を修正しました。はい、私はあなたがグループのいくつかの並べ替えを行うことができることを認識していますが、これはちょうど基本的な例です - これらは実際にデータフレームなので、mtcarsやirisのようなデータフレームである対応する値を考えることができます。 – runningbirds

答えて

0

これは、あなたが望むようなものかもしれません。いくつかのレベルの入れ子があるので、ややこしいことです。

まず、outputの各要素から要素nを抽出する機能:

tmpf <- function(n) sapply(output,function(x) x[[n]]) 
tmpf("MEAN") 
##  4  6  8 
## 26.66364 19.74286 15.10000 

今の要素のリストにその機能を適用します。

v <- names(output[[1]]) ## "MEAN" "SD" 
r <- setNames(lapply(v,tmpf),v) 
## $MEAN 
##  4  6  8 
## 26.66364 19.74286 15.10000 
## 
## $SD 
##  4  6  8 
## 4.509828 1.453567 2.560048 

あなたが本当にできたデータフレームをしたい場合lapply(r,as.data.frame)

2番目の複雑なケースを処理するには、tmpfをfo llows:

tmpf2 <- function(n) do.call(rbind,lapply(output,function(x) x[[n]])) 

または

tmpf2 <- function(n) dplyr::bind_rows(lapply(output,function(x) x[[n]])) 

は(おそらく purrrパッケージでこれを行うには、純粋な-tidyverse方法はあり。)

第2のステップは同じまま:

r <- setNames(lapply(v,tmpf2),v) 
+0

申し訳ありませんが、これは私が後にしているものに本当に近いと思いますが、#コメント= mtcars * rnorm(1) #sds = cars * rnorm(1)ちょうど私が把握することができないものが欠けている。これらの対応するデータフレームを追加する(rbindスタイル)ので、6 = 3cyl値*(mean/sd)ではなく2つのマスターテーブル(MEAN、SD) – runningbirds

関連する問題