2012-02-29 3 views
4

私は自分の仕事に必要なツールをddply istと信じていますし、正しい結果を得るのが少し難しいです。私はddplyについて何時間も読んだことがあり、さまざまなコードを実験しましたが、それ以上は自分では得られませんでした。ここで 土壌深さ複数のサブセットでddply遅れている

station <- c(rep("muc",13), rep("nbw", 17)) 
year <- c(rep(1994,4),rep(1995,4),rep(1996,5),rep(1994,5), rep(1995,4), rep(1996,4), rep(1997, 4)) 
depth <- c(rep(c("HUM","31-60","61-90","91-220"),2), rep(c("HUM","0-30", "31-60","61-90","91-220"),2),rep(c("HUM","0-30", "31-60","91-220"),1),rep(c("HUM","0-30", "31-60","61-90"),2)) 
doc <- c(80, 10, 3, 2,70, 15, 5, 5,70, 20, 5, 5, 2, 40, 10, 3, 2, 1,50, 15, 5, 2, 45, 20, 2, 1,35, 8, 2, 1) 

df <-data.frame(station,year,depth,doc) 
df 

深さは、土壌深さ(HUM =腐植層)を参照して、DOCは測定溶存有機炭素(DOC)である例示的なデータフレームです。毎年、文書の測定が行われるわけではなく、いくつかの深さクラスが欠落していることに注意してください。これは面倒ですが、データセットに頻繁に表示されます。 ddplyでは、このデータフレームに列を追加して、各深度について、上記の土壌層の文書を返し、何も腐植層の上に何もないのでHUM NAを与える必要があります。 例として:データフレームで

depth doc doc_m1 
HUM  80 NA 
31-60 10 80 
61-90 3 10 
91-220 2 3 

もちろんこれは、毎年、すべての深さのために計算する必要があります。私はループを避けたいと思っていますが、ddplyがこれに適しているようですが、ddplyを使うのに遅れを取ることはありませんでした。 これは私の知る限り、コード(明らかではない非常に遠く)になったとされています

doc <- ddply(df, .(year), transform, 
     doc_m1 = ????) 

誰もが提案を持っていますか? ありがとうございます!

答えて

5

あなたの深さは、(彼らはあなたの例であると)データセットに正しい順序に既にある場合は、あなただけ行うことができます:私も駅にグループ化された

doc2 <- ddply(df, .(station, year), transform, 
     doc_m1 = c(NA, doc[-length(doc)])) 

注意を。これは与える:

> head(doc2, 10) 
    station year depth doc doc_m1 
1  muc 1994 HUM 80  NA 
2  muc 1994 31-60 10  80 
3  muc 1994 61-90 3  10 
4  muc 1994 91-220 2  3 
5  muc 1995 HUM 70  NA 
6  muc 1995 31-60 15  70 
7  muc 1995 61-90 5  15 
8  muc 1995 91-220 5  5 
9  muc 1996 HUM 70  NA 
10  muc 1996 0-30 20  70 

彼らはすでに深さでソートされていない場合は、右の順にレベルの深さの要因を行い、その後、それに関連して並べ替えます。そうすれば、このアプローチが有効です。

+0

ありがとう、これは完全に機能しました! Rについてもっと学ぶほど、正しい解決策は通常、単純な解決策であることを実感しています。 –

関連する問題