5

plyr パッケージの使い方がよくわかりません。リストに保存されているデータフレームを分割し、関数を適用し、結果をデータフレームとして保存し、データフレームをリストとして再度結合するために使用しようとしています。したがって、次のデータが与えられます。

    #create test dfs
    df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10),d=(c("a","b","c","a","a","b","b","a","c","d")))
    df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9),d=(c("e","f","g","e","e","f","f","e","g")))
    df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8),d=(c("h","i","j","h","h","i","i","h")))

    #make them a list
    list.1<-list(df1=df1,df2=df2,df3=df3)

各データフレームの d で定義された各グループの平均を計算したいと思います。1 つのデータフレームでのみ plyr を使用する場合 (グループごとに特定の列の平均を計算するため)、plyr パッケージを使用する可能性は次のようになります。

    ddply(df1,.(d),summarise, mean=mean(a))

しかし、データフレーム内のすべての列とリスト内のすべてのデータフレームに適用するにはどうすればよいですか? そして、最終的に結果を含むマトリックスのリストを取得するために、すべてのデータを再構築するにはどうすればよいですか? この非常に基本的な質問で申し訳ありませんが、私はRが初めてで、かなり長い間これを解決しようとしてきました... thx.

4

3 に答える 3

3

あなたはいつでもあなただけをすることができlapplyますddply

 lapply(list.1, function(x)   ddply(x, .(d), function(x)  
                             data.frame(a=mean(x$a),b=mean(x$b),c= mean(x$c))) )

またはコードを正確に使用する:

lapply(list.1, function(x) ddply(x,.(d),summarise, mean=mean(a)) )
于 2013-01-21T13:58:48.577 に答える
3

すべてのデータを 1 つの big に入れる必要がありますdata.frame

library(reshape)

big_dataframe = ldply(list.1, function(x) melt(x, id.vars = "d"))
> head(big_dataframe)
  .id d variable value
1 df1 a        a    44                                                      
2 df1 b        a    17                                                      
3 df1 c        a    15                                                      
4 df1 a        a    30                                                      
5 df1 a        a    49                                                      
6 df1 b        a    33

...そしてそれを使用ddplyします。

res = ddply(big_dataframe, .(.id, d, variable), summarise, mn = mean(value))
> res
   .id d variable       mn
1  df1 a        a 40.00000                                                  
2  df1 a        b 25.25000                                                  
3  df1 a        c 31.25000                                                  
4  df1 b        a 22.66667                                                  
5  df1 b        b 16.00000                                                  
6  df1 b        c 26.00000                                                  
7  df1 c        a  9.00000                                                  
8  df1 c        b 16.50000                                                  
9  df1 c        c 15.00000                                                  
10 df1 d        a 28.00000                                                  
11 df1 d        b 24.00000                                                  
12 df1 d        c 39.00000                                                  
13 df2 e        a 18.50000                                                  
14 df2 e        b 15.50000                                                  
15 df2 e        c 16.50000                                                  
16 df2 f        a 26.33333                                                  
17 df2 f        b 42.00000                                                  
18 df2 f        c 37.00000                                                  
19 df2 g        a 26.50000                                                  
20 df2 g        b 22.00000                                                  
21 df2 g        c 31.00000                                                  
22 df3 h        a 29.25000                                                  
23 df3 h        b 34.25000                                                  
24 df3 h        c 32.00000                                                  
25 df3 i        a 30.33333                                                  
26 df3 i        b 40.00000                                                  
27 df3 i        c 24.33333                                                  
28 df3 j        a 21.00000                                                  
29 df3 j        b  5.00000                                                  
30 df3 j        c 46.00000 

これは、各変数 ( a- c)、 factor のレベルごとd、およびサブデータフレーム (df1-df3) ごとの平均を示します。

于 2013-01-21T13:30:56.230 に答える
1

llply()とを組み合わせた解がこちらddply()。まず、llply()リストの各要素に関数を適用し、リストを返します。次にddply()、 list の各データ フレームに適用され、 column に従って各データ フレームを分割しますd。関数colMeans()は、各数値列の平均値を計算するために使用されます。

llply(list.1,function(x) ddply(x,.(d),function(x) colMeans(x[,1:3])))
$df1
  d        a     b        c
1 a 22.25000 26.25 34.25000
2 b 19.66667 22.00 28.66667
3 c 37.00000 44.50 18.00000
4 d 17.00000  3.00  4.00000

$df2
  d        a        b    c
1 e 20.50000 32.25000 18.5
2 f 25.33333 34.33333 21.0
3 g 20.50000 26.50000 16.5

$df3
  d    a        b        c
1 h 17.5 26.50000 37.25000
2 i 45.0 22.33333 26.33333
3 j 25.0 33.00000 42.00000
于 2013-01-21T13:58:37.853 に答える