2016-05-12 32 views
-1

1838年から2001年に終了する毎日の降水値の時系列があります。NAでコード化されたレコードにはいくらかの日数がありません。月内にNA値が存在する月のすべての値を削除します。

aggregate(PPT~Year, df, sum) 

これは、正常に動作しますが、問題:私は今使用してレコードの年間毎月手段に日降水量の合計を合計する集計関数を使用しています

Year Month Day PPT 

1838 1 1 0.0 
1838 1 2 NA 
1838 1 3 1.3 
1838 1 4 0.6 

:私のデータの形式をとります毎月集計された金額の一部が本物ではないということです。たとえば、1838年1月の月に欠損日が20日あった場合、その月の合計金額は本物ではありません。

私がしたいのは、集計関数が不足した日数(NA)を含む任意の月に集計された合計を返さないようにすることです。つまり、わずか1日も足りない場合、返されないようにします。あるいは、集計する前にNA値を含む月を削除することもできます。

+0

'sum(c(NA、1,2,3))'を試してください。 – zx8754

+0

これは単一のNA値を作成し、残念なことにこの状況に役立ちません。 –

+0

これはちょうどヒントでしたが、YearMonthで集計して、*本物ではない月の合計を削除し、Yearで集計することができました。 – zx8754

答えて

1
df_precipitation     <- data.frame(
    Year = rep(x = 2016, times = 61), 
    Month = rep(x = c(5, 6), times = c(31, 30)), 
    Day = c(1:31, 1:30), 
    PPT = c(NA, sample(x = 100, size = 60)) 
) 

df_aggregated     <- aggregate(
    formula = PPT ~ Year + Month, 
    data = df_precipitation, 
    FUN = sum, 
    na.action = na.pass 
) 

df_aggregated     <- na.omit(object = df_aggregated) 

コード内の全ての値の合計であり、いくつかの偽データとdata.frameを作成によって凝集を行う場合、以下の通りです。年と月をna.action = na.passで指定します。

月が降水量のNA値を持つ場合、na.passはsum()関数がNA値を取得することを保証します。そして、デフォルトの合計によって()関数は、入力値のいずれかがその後

NAであれば、我々は戻らない集約関数を作るNA

として合計と行を捨てna.omitを行うNAを返します。逃した日を含む任意の月の集計合計

+0

有難う御座います。 –

1

これは潜在的に私が正しく

structure(list(year = c(1838, 1838, 1838, 1838, 1838), month = c(1, 1, 1, 1,2), day = c(1, 2, 3, 4, 1), ppt = c(0, NA, 1.3, 0.6, 0.1)), .Names = c("year", "month", "day", "ppt"), row.names = c(NA, -5L), class = "data.frame") 

df %>% group_by(year,month) %>% summarise(s = sum(ppt)) 

結果、この結果を表示するために別の月に追加の行を追加した、次のように私が使用したデータがあるdplyrライブラリ を使用して仕事ができますsはその月

year month  s 
(dbl) (dbl) (dbl) 
1 1838  1 NA 
2 1838  2 0.1 
+0

これは、意味のない多数の数字を持つsというデータセットに追加の列を生成するだけです。 –

+0

ありがとう、これは素晴らしい作品です。おそらく、愚かな質問ですが、これをデータフレームにするにはどうすればいいですか?現時点ではこのソリューションが表示されますが、データフレームなどの名前付きオブジェクトでない限り、それ以上のことはできません。 –

+0

new_df <- df %>%group_by(年月)%>%summary(s = sum(ppt)) – theArun

関連する問題