2011-09-27 13 views
11

私はこのようになり、データフレームを持っている:ddplyを使用してデータフレームに列を追加するにはどうすればよいですか?

site date var dil 
    1 A 7.4 2 
    2 A 6.5 2 
    1 A 7.3 3 
    2 A 7.3 3 
    1 B 7.1 1 
    2 B 7.7 2 
    1 B 7.7 3 
    2 B 7.4 3 

私は加重平均を計算するのに必要な重み付け係数が含まれています。このデータフレームにwtと呼ばれる列を追加する必要があります。この重み係数は、sitedateの組み合わせごとに導かれなければなりません。

> weight <- function(dil){ 
        dil/sum(dil) 
        } 

が、その後siteの組み合わせごとに関数を適用し、date

> df$wt <- ddply(df,.(date,site),.fun=weight) 

が、私は得る:

私が使用しているアプローチは、最初weigthing係数を計算する機能を内蔵しすることですこのエラーメッセージ:

Error in FUN(X[[1L]], ...) : 
    only defined on a data frame with all numeric variables 
+4

(DF、(日付、場所)、変換、重量=体重(希)。)' – Ramnath

+0

おかげRamnath、その:これはあなたがddply内部data.frameに列を追加することができます – matteo

答えて

15

あなたはほとんどそこにいます。 transform関数を使用するようにコードを変更します。試し `DF = ddply

weight <- function(x) x/sum(x) 

ddply(df, .(date,site), transform, weight=weight(dil)) 

    site date var dil weight 
1 1 A 7.4 2 0.40 
2 1 A 7.3 3 0.60 
3 2 A 6.5 2 0.40 
4 2 A 7.3 3 0.60 
5 1 B 7.1 1 0.25 
6 1 B 7.7 3 0.75 
7 2 B 7.7 2 0.40 
8 2 B 7.4 3 0.60 
+1

ddplyを使うには、plyrパッケージをインストールする必要があります – sshevlyagin

関連する問題