0

私はこれに数時間取り組んでいますが、解決策が見つからないようです。非常に大きなデータ フレーム (150 万行以上) があり、かなり具体的な操作を実行したいと考えています。まず、私のデータは次のようになります。

STATION       DATE      Precip
COOP 310     -7788        .24
COOP 310     -7788        .15
COOP 310     -6654        .59
COOP 310     -6654        .10
COOP 499     -7122        .64
COOP 499     -7122        .36
COOP 499     -7122        .14
COOP 499     -2350        .11
COOP 499     -2350        .85

気象ステーション ID (STATION)、UNIX エポック形式の日付 (DATE)、および降水値 (雨が降った場合の 15 分のデータ間隔) があります。私がやろうとしてきたことは、ステーションごとに雨が降った日ごとの毎日の降雨量の合計を決定することです. 望ましい出力は次のようになります。

STATION       DATE        24-hour_PRECIP
COOP 310     -7788        0.39
COOP 310     -6654        0.69
COOP 499     -7122        1.14
COOP 499     -2350        0.96

SPLITこれは基本的に、同じ STATION 値に基づいてすべてのデータを分割し、次に同じ DATE 値に基づいて 2 回操作を行うことを意味していると思いました。理論的には、この出力は操作によって実行され、各一意の日付/ステーション セット内のデータ セットに関数がSAPPLY適用されます。SUM私のアプローチ(間違っていますが):

データ フレーム名は「dfhour」です。

sp1<-split(dfhour$Precip,dfhour$STATION)

このデータに対してsapply関数をうまく実行できますが、sapplyを使用する前にさらに分割したいと思います。私は次のようなことをしていることを知っています

sapply(split(split(dfhour$Precip, dfhour$STATION),dfhour$DATE),FUN=sum)

関数の出力はsplitリストであり、次のsplit関数はリストを引数として受け入れることができないため、機能しません。この問題に関するガイダンスはありますか? 必要な場所に到達するのに役立つ他の機能は何ですか?

4

3 に答える 3

0

ネストされた は必要ありませんsplits。おそらく関数を使用して、交差したレベルをキャプチャする単一の「分割」引数を提供する必要がありinteractionます。

tapply( statfrm$Precip, interaction(statfrm$STATION, statfrm$DATE) , sum) 
#----------------
COOP-310.-7788 COOP-499.-7788 COOP-310.-7122 COOP-499.-7122 COOP-310.-6654 
          0.39             NA             NA           1.14           0.69 
COOP-499.-6654 COOP-310.-2350 COOP-499.-2350 
            NA             NA           0.96 

また、同様の回答を得るために split-sapply 戦略を使用することもできます。あなたのケースでは、tapply で得られる NA よりもゼロ値の方が適切な場合があります。

 sapply(split(statfrm$Precip, interaction(statfrm$STATION, statfrm$DATE) ), sum) 
#-------
COOP-310.-7788 COOP-499.-7788 COOP-310.-7122 COOP-499.-7122 COOP-310.-6654 
          0.39           0.00           0.00           1.14           0.69 
COOP-499.-6654 COOP-310.-2350 COOP-499.-2350 
          0.00           0.00           0.96 

このベクターの表示に関しては、as.matrix をベクターにラップして「下向き」に表示することがあります。

as.matrix(sapply(split(statfrm$Precip, interaction(statfrm$STATION, statfrm$DATE) ), sum))
#_________________
               [,1]
COOP-310.-7788 0.39
COOP-499.-7788 0.00
COOP-310.-7122 0.00
COOP-499.-7122 1.14
COOP-310.-6654 0.69
COOP-499.-6654 0.00
COOP-310.-2350 0.00
COOP-499.-2350 0.96
于 2013-04-29T18:06:07.570 に答える