2

私は次のことをしようとしています。データセットは次のようになり、POSIXct 形式の日付、毎時風速、毎時風向が含まれています (df は wind_DNSeason と呼ばれます)。私の目標は、季節と日照に基づくビューフォート スケールに従って、風速の頻度カウントを取得することです。

  date                     wspd_havg10m_kn avg_wdir
1 2013-12-06 00:25:00        9.835853       50
2 2013-12-06 01:25:00       10.506479       56
3 2013-12-06 02:25:00       11.847732       55
4 2013-12-06 03:25:00        8.494600       53
5 2013-12-06 04:25:00       13.188985       47
6 2013-12-06 05:25:00       13.188985       60

日付に基づいて季節を追加する:

wind_DNSeason$season<-time2season(wind_DNSeason$date, out.fmt="seasons", type="default")

次に、openair パッケージを使用して、データを昼間と夜間に分けています。

wind_DNSeason$daylight <- cutData(wind, type = "daylight", local.hour.offset = -8, latitude = 54.312519, longitude = -130.305405, local.tz= "Canada/Pacific")

関数集計については認識していますが、正しく使用しているとは思えません。

aggregate(wspd_havg10m_kn ~ season + daylight, wind_DNSeason, length)

それは私に出現回数を与えますが、それは私が望むものではありません。1 つのステップでやりすぎていませんか?

季節ごとに発生する風速 (以下のブレークを参照) のグループ分けを昼と夜に分けて知る必要があります。さまざまな周波数で棒グラフを作成したいので。ブレーク = c(0,1,3,6,10,16, 21, 27, 33, 40, 47)

次のようなものを取得できますか?そこからパーセンテージを簡単に計算して棒グラフにプロットできます:

  season  daylight            total_count  wspd<=1 wspd>1,<=3 wspd>3,<=6 etc

1 autumm  daylight             854            151      34         56   
2 spring  daylight            2580            456      56         98
3 summer  daylight            1722            34       344        09
4 winter  daylight             852            545      55         55
5 autumm nighttime            1030            55        6         777
6 spring nighttime            1825            89       89         344
7 summer nighttime             827            344      55         66
8 winter nighttime            1533            34       66         777

何か案は?助けてくれてありがとう!

私はdplyrを使ってみましたが、私は本当に近いと思いますが、どういうわけか周波数を正しく加算していないようです. これは、提案されたコードをどのように適用したかです。

a<-wind_DNSeason %>% group_by(season,daylight) %>% 
  mutate(count=n(),"wspd<=1" = sum(wspd_havg10m_kn<=1),
     "wspd>1,<=3" = sum(wspd_havg10m_kn > 1 & wspd_havg10m_kn <= 3, na.rm=TRUE), 
     "wspd>3,<=6" = sum(wspd_havg10m_kn > 3 & wspd_havg10m_kn <= 6,na.rm=TRUE),
     "wspd>6,<=10" = sum(wspd_havg10m_kn > 6 & wspd_havg10m_kn <= 10,na.rm=TRUE),
     "wspd>10,<=16" = sum(wspd_havg10m_kn > 10 & wspd_havg10m_kn <= 16,na.rm=TRUE),
     "wspd>16,<=21" = sum(wspd_havg10m_kn > 16 & wspd_havg10m_kn <= 21,na.rm=TRUE),
     "wspd>21,<=27" = sum(wspd_havg10m_kn > 21 & wspd_havg10m_kn <= 27,na.rm=TRUE),
     "wspd>27,<=33" = sum(wspd_havg10m_kn > 27 & wspd_havg10m_kn <= 33,na.rm=TRUE),
     "wspd>33,<=40" = sum(wspd_havg10m_kn > 33 & wspd_havg10m_kn <= 40,na.rm=TRUE),
     "wspd>40,<=47" = sum(wspd_havg10m_kn > 33 & wspd_havg10m_kn <= 47,na.rm=TRUE))

出力は次のようになります。一意の行をいくつか選択して、df 全体で複製します (たとえば、冬の昼と夜の場合)。

date    wspd_havg10m_kn avg_wdir    daylight    season  count   wspd<=1 wspd>1,<=3  wspd>3,<=6  wspd>6,<=10 wspd>10,<=16    wspd>16,<=21    wspd>21,<=27    wspd>27,<=33    wspd>33,<=40    wspd>40,<=47
1   2013-12-06 00:25:00 9.8358531   50  nighttime   winter  2751    NA  59  185 315 551 260 106 47  6   6
2   2013-12-06 12:25:00 7.3768898   57  daylight    winter  1449    NA  13  73  251 322 133 46  13  0   0

異なるグループの度数を合計すると合計数になるのではないでしょうか? 合計 df には 13368 のタイムステップが含まれています。各グループの周波数を合計すると、11165 しか得られません。最大のグループよりも大きい風速はありません。私は何が欠けていますか?

4

2 に答える 2

1

dplyr解決策は次のとおりです。

library(dplyr)
wind_DNSeason %>% group_by(season,daylight) %>% 
    summarise(count=n(),"wspd<=1" = sum(wspd_havg10m_kn<=1),
           "wspd>1,<=3" = sum(wspd_havg10m_kn > 1 & wspd_havg10m_kn <= 3),
           "wspd>3,<=6" = sum(wspd_havg10m_kn > 3 & wspd_havg10m_kn <= 6)
    )

名前と要件を入力して、風の強さの列をいくつでも追加できます。

于 2015-06-23T21:26:53.557 に答える