2016-09-11 9 views
1

2つの日付の間に一定のしきい値(50以下またはそれ以下と言う)以下の降水数を数えようとしています。2つの日付の間の要素の数を条件に応じてRで計算する

基本的には、包括的にカウントしたい日付を含むベクトルcutsがあります。私はcutsベクトルを使用して、異なるビンのデータセットを「サブセット化」し、雨が降っている場所の雨が50mm未満のイベントの数をカウントします。

私は現時点でdplyrとforループを使用していますが、何も動作していません。

set.seed(12345) 
df = data.frame(date = seq(as.Date("2000/03/01"), as.Date("2002/03/01"), "days"), 
       precipitation = rnorm(length(seq(as.Date("2000/03/01"), as.Date("2002/03/01"), "days")),80,20)) 
cuts = c("2001-11-25","2002-01-01","2002-02-18","2002-03-01") 
for (i in 1:length(cuts)) { 
    df %>% summarise(count.prec = if (date > cuts[i] | date < cuts[i+1]) {count(precipitation <= 50)}) 
} 

しかし、私はこのエラーメッセージがあります。

Error: no applicable method for 'group_by_' applied to an object of class "logical" 
In addition: Warning message: 
In if (c(11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, : 
    the condition has length > 1 and only the first element will be used 

これはどちらか動作していない:

for (i in 1:length(cuts)) { 
    df %>% if (date > cuts[i] | date < cuts[i+1])%>% summarise(count.prec = count(precipitation <= 50)) 
} 

答えて

4
を使用して参加して試すことができますが

お試しください:

df %>% 
    group_by(gr = cut(date, breaks = as.Date(cuts))) %>% 
    summarise(res = sum(precipitation <= 50)) 

います:

# A tibble: 4 × 2 
      gr res 
     <fctr> <int> 
1 2001-11-25  1 
2 2002-01-01  4 
3 2002-02-18  2 
4   NA 40 

それとも@Frankで述べたあたりとしては - あなたはtally(precipitation <= 50)

+0

よかったら教えてください。これは、 'sum'関数の' TRUE'または 'FALSE'の数を数えています。一致していない場合は、NAを報告していますか? –

+0

@ M.Beausoleil正確に。 '降水量<= 50'の' cuts'で指定された範囲外の40の日付があります。これを結果から削除したいのであれば、 '...%>%na.omit()'または '...%>%filter(!is.na(gr))'をチェーンに追加するだけです。 –

+0

NA行を削除するには、最後に '%>% フィルタ(!is.na(gr))'を追加してください!ありがとう!非常に賢い。 –

1

我々は非エクイはdata.table

library(data.table)#v1.9.7+ 
df2 <- data.table(cuts1 = as.Date(cuts[-length(cuts)]), cuts2 = as.Date(cuts[-1])) 
setDT(df)[df2, .(Count = sum(precipitation <=50)), 
      on = .(date > cuts1, date < cuts2), by = .EACHI] 
#   date  date Count 
#1: 2001-11-25 2002-01-01  1 
#2: 2002-01-01 2002-02-18  4 
#3: 2002-02-18 2002-03-01  2 
+0

summarise()を置き換えることができ、私はこのエラーがあります([.data.table' ''でエラー –

+0

@ M.Beausoleil最近、data.tableのdevelバージョンで紹介されました。 – akrun

+0

ええ、私のバージョンは「1.9.6」です。 –

関連する問題