2016-10-15 11 views
1

大きなデータフレームalldataがあります。以前は古いバージョンで行われていたベースRで書かれたいくつかの計算をしようとしています。私の目標は新しい列を作成することですこれらの計算の出力はdplyrを使用して計算されます。以前のバージョンのこのコードでは、数十の中間データフレームを使用し、これらの計算を関数を使用して別々のファイルに書き出しました。マトリックス関数をdplyr突然変異体に埋め込む

これらの関数を書かれているとおりに保存することは可能ですが、元のバージョンの一時的な行列ではなく、alldataのdplyr参照列に埋め込むことができるのは興味深いです。

ここに私が取り組んでいるコードのサンプルセクションがあります。コメントでわかるように、私は単純な加重平均関数のために古いRコードをdplyrに変換しました。機能がwgtmeanよりも複雑になりますよう

d_weighted = alldata %>% 
    # equivalent to by = list(regspp = data$regspp[inds]) from old code 
    group_by(regspp, year) %>% 
    # equivalent to wgtmean = function(x, na.rm=FALSE) wtd.mean(x=x[,1], weights=x[,2], na.rm=na.rm) from old code 
    mutate(lat_wgtmean = wtd.mean(x=lat, weights=wtcpue, na.rm=FALSE)) 

しかし、私はあるとしてだけ機能が含まれるようにしたいと思います。

古いコードから次の関数は、最初の列は値から成るマトリックスと重みの第二の加重標準偏差を計算する

wgtsd = function(mat, ...){ 
    x = mat[,1][mat[,2]>0] # trim to values with weight > 0 
    w = mat[,2][mat[,2]>0] 
    sqrt(wtd.var(x=x, weights=w, ...)) 
} 

はdplyrでこの機能を埋め込むことが可能である::加重標準偏差を含む新しい列をalldataに作成するために、値= lat(緯度)および重み= wtcpue(単位努力当たりキャッチ、重みに変換)で変更しますか?

私はこれらの関数を書き直すことができると認識していますが、後でもっと複雑なもの(例として下のものを参照してください)にはそうしたくないと思います。関数を行列引数とdplyrで統合する。

wgtskew = function(mat, na.rm=FALSE){ 
    x = mat[,1][mat[,2]>0] # trim to values with weight > 0 
    w = mat[,2][mat[,2]>0] 
    if(na.rm){ 
     s = !is.na(x+w) 
     x = x[s] 
     w = w[s] 
    } 
    n = length(x) 
    w = n * w/sum(w)  # normalize 
    if(n>2){ 
     c3 = n/((n - 1) * (n - 2)) 
     sdv = wgtsd(cbind(x, w), normwt = TRUE, na.rm = na.rm) 
     xbar = wtd.mean(x, w, na.rm = na.rm) 
     sk = c3 * sum(w^(3/2) * ((x - xbar)/sdv)^3) 
     return(sk) 
    } else { 
     return(NA) 
    } 
} 
+0

代替機能は受け入れられる回答ですか?独自の加重標準偏差関数の自作はおそらく素晴らしい考えではないようです。 – Hugh

+0

確かに!しかし、私はRの統計関数に慣れていないので、これらの(確かに自家製の)数学関数と同じ正確な数学的出力を明確に達成する関数を見つける方法はわかりません。 – AFH

答えて

0

パッケージmatrixStatsWeighted.Desc.Statはあなたが必要な場合があります機能の多くが含まれています。

次にあなたが見つけ、あなたのテキストエディタを使用して交換する、または、例えば次のいずれかです。

wgtsd <- function(...) matrixStats::weightedSd(...) 

前と同じようにスクリプトを実行します。

関連する問題