2017-01-29 7 views
1

私はの2段階質問を持っています。私が持っているものに似たデータセットを作成するには、我々はairqualityデータセットで始めることができます。Rキャスト:小計に値/条件付き除外を適用する

myaqm <- melt(airquality, id=c("Month", "Day"), na.rm = TRUE) 

myaqm_dcast <- dcast(myaqm, Day+variable~Month, 
     value.var = "value", sum, margins=c("Day", "variable", "Month")) 

私たちに与えて、この:

> head(myaqm_dcast, n=10) 
    Day variable  5  6  7  8  9 (all) 
1 1 Ozone 41.0 0.0 135.0 39.0 96.0 311.0 
2 1 Solar.R 190.0 286.0 269.0 83.0 167.0 995.0 
3 1  Wind 7.4 8.6 4.1 6.9 6.9 33.9 
4 1  Temp 67.0 78.0 84.0 81.0 91.0 401.0 
5 1 (all) 305.4 372.6 492.1 209.9 360.9 1740.9 
6 2 Ozone 36.0 0.0 49.0 9.0 78.0 172.0 
7 2 Solar.R 118.0 287.0 248.0 24.0 197.0 874.0 
8 2  Wind 8.0 9.7 9.2 13.8 5.1 45.8 
9 2  Temp 72.0 74.0 85.0 81.0 92.0 404.0 
10 2 (all) 234.0 370.7 391.2 127.8 372.1 1495.8 

最初の質問:あなたは風を取り除くするにはどうすればよいです各日から(すべて)小計?

dplyr、おそらくdcastの代わりに使用することを意図していると思いますが、私の人生のために、サブトータルの除外例を見つけることはできません。

2番目の質問:同様に、我々はまた、すべての変数の毎日平均行、温度除くを含める方法をうまくしようとしています。だから、データセットは、このようなものになります。ここでは

Day variable  5  6  7  8  9 (all) 
1 1 Ozone 41.0 0.0 135.0 39.0 96.0 311.0 
2 1 Solar.R 190.0 286.0 269.0 83.0 167.0 995.0 
3 1  Wind 7.4 8.6 4.1 6.9 6.9 33.9 
4 1  Temp 67.0 78.0 84.0 81.0 91.0 401.0 
5 1 Day Avg 79.5 98.2 136.0 43.0 90.0 446.6 
6 1 (all) 298.0 364.0 488.0 203.0 354.0 1707.0 

7 2 Ozone 36.0 0.0 49.0 9.0 78.0 172.0 
8 2 Solar.R 118.0 287.0 248.0 24.0 197.0 874.0 
9 2  Wind 8.0 9.7 9.2 13.8 5.1 45.8 
10 2  Temp 72.0 74.0 85.0 81.0 92.0 404.0 
11 2 Day Avg 54.0 98.9 102.1 15.6 93.4 363.9 
12 2 (all) 226.0 361.0 382.0 114.0 367.0 1450.0 

日平均オゾンの平均Solar.Rある - 一時が含まれていません。

そして(すべて)オゾンSolar.R一時の和である - が含まれていません。

私はそれがdplyrの別のケースだと思います。それは同様の解決策になりますが、私は両方の質問をすると思いました。

編集:私の実際のデータには、1日に4つ以上の変数があり、実際には毎日表示されないものもありますが、毎日の「日平均」変数には、それは名前ではなく必要性よりも、すべての変数の命名よりも(すなわち。温度または)によって変数を除外するためにきれいになるように「(すべて)」の計算は、(含まれるすなわち。オゾン太陽。 R)。

+0

明確化:あなたは風はまだ要約に表示したいが、小計の一部ではありませんか? –

+0

確かに。毎日の小計はすべての貢献、サンズウィンドの合計を表します。 summarize()にはWindとTempを含めることができます。 –

答えて

1

以下のコードは、長い形式のデータを持つ2件の列の要約を計算し、次いで、長いデータフレームに追加し、むしろ鋳造時の計算を行うよりも、その後終了時に行の合計を追加します

library(reshape2) 
library(dplyr) 

myaqm <- melt(airquality, id=c("Month", "Day"), na.rm = TRUE) %>% 
      group_by(Month, Day) 

myaqm_summary = myaqm %>% 
    bind_rows(myaqm %>% 
       summarise(value = sum(value[variable != "Wind"], na.rm=TRUE), 
         variable = "All")) %>% 
    bind_rows(myaqm %>% 
       summarise(value = mean(value[variable != "Temp"]), 
         variable = "Day Avg")) %>% 
    dcast(Day + variable ~ Month, value.var = "value") %>% 
    mutate(All = rowSums(.[, grepl("[5-9]", names(.))], na.rm=TRUE)) 
ここで

出力の最初の12行以下のとおりです。

Day variable   5  6  7   8   9  All 
1 1  All 298.00000 364.00 488.0000 203.00000 354.00000 1707.0000 
2 1 Day Avg 79.46667 147.30 136.0333 42.96667 89.96667 495.7333 
3 1 Ozone 41.00000  NA 135.0000 39.00000 96.00000 311.0000 
4 1 Solar.R 190.00000 286.00 269.0000 83.00000 167.00000 995.0000 
5 1  Temp 67.00000 78.00 84.0000 81.00000 91.00000 401.0000 
6 1  Wind 7.40000 8.60 4.1000 6.90000 6.90000 33.9000 
7 2  All 226.00000 361.00 382.0000 114.00000 367.00000 1450.0000 
8 2 Day Avg 54.00000 148.35 102.0667 15.60000 93.36667 413.3833 
9 2 Ozone 36.00000  NA 49.0000 9.00000 78.00000 172.0000 
10 2 Solar.R 118.00000 287.00 248.0000 24.00000 197.00000 874.0000 
11 2  Temp 72.00000 74.00 85.0000 81.00000 92.00000 404.0000 
12 2  Wind 8.00000 9.70 9.2000 13.80000 5.10000 45.8000