1

data.tableを使用して要約統計量を計算し、その結果に基づいて2番目の列の統計量を計算したいと思います。

これは、大気質データを使用した例です。

データを設定する

(このように来たふりをします)

library(data.table)
dt = as.data.table(airquality)
dt[ , Season:=ifelse(Month>7, 'Fall', 'Summer')]

風が強い月もあります

## The range of monthly Wind values
dt[ , list(MinWind=min(Wind), MaxWind=max(Wind)), 
        by=c('Season', 'Month')]

---- R OUTPUT:
   Season Month MinWind MaxWind
1: Summer     5     5.7    20.1
2: Summer     6     1.7    20.7
3: Summer     7     4.1    14.9
4:   Fall     8     2.3    15.5
5:   Fall     9     2.8    16.6
>

目標:風が20を超えるまたは下回る月ごとにグループ化された平均季節日射量を計算します。

これを1つのステップで実行できますか?

## Add a column to indicate if it was a high wind month
dt[, HighWind:=any(Wind>20), by=Month]
## Aggregate based on both HighWind and Season
dt[, list(AveSolarR=mean(Solar.R, na.rm=TRUE)), by=c("HighWind","Season")]

---- R OUTPUT:
   HighWind season AveSolarR
1:     TRUE Summer  185.9649
2:    FALSE Summer  216.4839
3:    FALSE   Fall  169.5690
4

1 に答える 1

5

両方を1つにまとめてみませんlistか?

dt[,list(HighWind=any(Wind>20),AveSolarR=mean(Solar.R,na.rm=T)),by=Month]
   Month HighWind AveSolarR
1:     5     TRUE  181.2963
2:     6     TRUE  190.1667
3:     7    FALSE  216.4839
4:     8    FALSE  171.8571
5:     9    FALSE  167.4333

HighWind修正された問題については、ステートメントで計算を行う必要がありますが、byそれはより複雑になると思います。

dt[,list(AveSolarR=mean(Solar.R,na.rm=T)),
  by=list(HighWind=Month%in%Month[Wind>20],Season)]
   HighWind Season AveSolarR
1:     TRUE Summer  185.9649
2:    FALSE Summer  216.4839
3:    FALSE   Fall  169.5690
于 2012-09-07T01:05:26.233 に答える