R:TimeVerageと組み合わせた集約 -- r フィールド と aggregate フィールド と plyr フィールド 関連 問題

R: aggregate combined with timeAverage












0
vote

問題

日本語

毎時観察され、モデル化された大気質データを持つデータフレームを持っています。追加情報は測定ステーション、国、ステーションタイプ、モデル:

<事前> <コード> > head(PM10val) date station type model country obs mod 1 2009-01-01 00:00:00 BELAB01 sB chimere BE 63 13.45 2 2009-01-01 01:00:00 BELAB01 sB chimere BE 50 18.71 3 2009-01-01 02:00:00 BELAB01 sB chimere BE 77 20.65 4 2009-01-01 03:00:00 BELAB01 sB chimere BE 68 21.42 5 2009-01-01 04:00:00 BELAB01 sB chimere BE 58 22.47 6 2009-01-01 05:00:00 BELAB01 sB chimere BE 62 24.02

OpenAirパッケージのTimeaverage関数(DATEフィールドを含むデータフレームの時間平均)を使用して、ステーションごと、1台につき毎日または年間平均値を計算します。私は試しました:

<事前> <コード> > anmean <- aggregate(PM10val, by=list(PM10val$station,PM10val$model), + function (x) timeAverage(x,avg.time="year",data.thresh=75, statistic="mean"))

これはモデルと駅ごとの「OBS」と「MOD」の年間平均平均を計算し、データキャプチャしきい値は75%です。 しかしそれは戻ります:

<事前> <コード> Error in `[.default`(mydata, , Names) : incorrect number of dimensions 11 NextMethod("[") 10 `[.POSIXct`(mydata, , Names) 9 mydata[, Names] 8 checkPrep(mydata, vars, type = "default", remove.calm = FALSE, strip.white = FALSE) 7 timeAverage(x, avg.time = "year", data.thresh = 75, statistic = "mean") 6 FUN(X[[1L]], ...) 5 lapply(X = split(e, grp), FUN = FUN, ...) 4 FUN(X[[1L]], ...) 3 lapply(x, function(e) { ans <- lapply(X = split(e, grp), FUN = FUN, ...) if (simplify && length(len <- unique(sapply(ans, length))) == 1L) { ... 2 aggregate.data.frame(PM10val, by = list(PM10val$station, PM10val$model), function(x) timeAverage(x, avg.time = "year", data.thresh = 75, statistic = "mean")) 1 aggregate(PM10val, by = list(PM10val$station, PM10val$model), function(x) timeAverage(x, avg.time = "year", data.thresh = 75, statistic = "mean"))

私は何をしていますか?私はいつでもループを使うことができますが、これが行く方法であるとは思わない。 ありがとう!

英語

I have a dataframe with hourly observed and modelled air quality data. Additional information is measuring station, country, stationtype and model:

> head(PM10val)                  date station type   model country obs   mod 1 2009-01-01 00:00:00 BELAB01   sB chimere      BE  63 13.45 2 2009-01-01 01:00:00 BELAB01   sB chimere      BE  50 18.71 3 2009-01-01 02:00:00 BELAB01   sB chimere      BE  77 20.65 4 2009-01-01 03:00:00 BELAB01   sB chimere      BE  68 21.42 5 2009-01-01 04:00:00 BELAB01   sB chimere      BE  58 22.47 6 2009-01-01 05:00:00 BELAB01   sB chimere      BE  62 24.02 

I would like to use the timeAverage function (calculate time-averages of a dataframe containing a date field) of openair package to calculate daily or annual mean values, per station and per model. I tried:

> anmean <- aggregate(PM10val, by=list(PM10val$station,PM10val$model), +         function (x) timeAverage(x,avg.time="year",data.thresh=75,    statistic="mean")) 

This should calculate annual mean averages for "obs" and "mod" per model and station, with a data capture threshold of 75%. but it returns:

 Error in `[.default`(mydata, , Names) : incorrect number of dimensions     11 NextMethod("[")  10 `[.POSIXct`(mydata, , Names)  9 mydata[, Names]  8 checkPrep(mydata, vars, type = "default", remove.calm = FALSE,      strip.white = FALSE)  7 timeAverage(x, avg.time = "year", data.thresh = 75, statistic = "mean")  6 FUN(X[[1L]], ...)  5 lapply(X = split(e, grp), FUN = FUN, ...)  4 FUN(X[[1L]], ...)  3 lapply(x, function(e) {     ans <- lapply(X = split(e, grp), FUN = FUN, ...)     if (simplify && length(len <- unique(sapply(ans, length))) ==      1L) { ...  2 aggregate.data.frame(PM10val, by = list(PM10val$station, PM10val$model),      function(x) timeAverage(x, avg.time = "year", data.thresh = 75,          statistic = "mean"))  1 aggregate(PM10val, by = list(PM10val$station, PM10val$model),      function(x) timeAverage(x, avg.time = "year", data.thresh = 75,          statistic = "mean"))   

What am I doing wrong? I can always use a loop but I don't think this is the way to go. Thanks!

</div
        
   
   

回答リスト

1
 
vote
vote
ベストアンサー
 

代わりに ddply を使用することをお勧めします。 config.omniauth_path_prefix = "/accounts/auth" 0 データ型と config.omniauth_path_prefix = "/accounts/auth" 1 にはいくつかの問題があります。実際には、 config.omniauth_path_prefix = "/accounts/auth" 2 は、サブデータではなく、日付としてのを参照してください。

ベルギーデータでは機能します。 関数 config.omniauth_path_prefix = "/accounts/auth" 3 は同じことをしていますが、2番目のパラメータとして指定したレベルで分割し、最初に「サイト」で分割され、次に「COUNTRY」で分割してから適用します。すべての分割の機能コードを短くするために、 config.omniauth_path_prefix = "/accounts/auth" 5 に機能を折り返しました。 ImportairBase関数でデータをバインドするために設定された config.omniauth_path_prefix = "/accounts/auth" 6 998877617 をデータに置き換えることができ、それは機能するべきです。

<事前> <コード> config.omniauth_path_prefix = "/accounts/auth" 8
 

I would recommend to use ddply instead. There are some issues with POSIXct data type and aggregate. In fact your function see x as a date, not a sub data.frame.

Following code works with Belgian data. Function ddply does the same, it splits by levels you specify as a second parameter c("site", "country"), first will be split by "site" and then by "country", and then apply function for every split. I have wrapped your function to Funfun just to make code shorter. Also technicality is bind_rows = rbind.fill just set for binding data in importAirbase function. You can replace data2 with your data and it should work.

library(plyr) Funfun = function (x) timeAverage(x, avg.time="year", data.thresh=75, statistic="mean") bind_rows = rbind.fill data2 = importAirbase(site = c("BELAB01","BELAB02") , year = 2011:2012, pollutant = NA,     add = c("country", "site.type"), splice = FALSE, local = NA) ddply(data2, c("site", "country"), Funfun) 
</div
 
 
     
     

関連する質問

2  いくつかの重複した行を組み合わせる&彼らの列の一つの列を合計する  ( Combining some duplicated rows summing one of their column ) 
私はこのデータフレームを持っています: <事前> <コード> > names(events) [1] "EID" "X" "Y" "trip" "tow" "catch" "effort" "depth" [9] "...

1  リストに含まれているすべての文字列からの複数のパターンを使用して複数の部分文字を抽出して結合し、Rのリストに戻る  ( Extract combine multiple substrings using multiple patterns from some but not ) 
私はエレガントで簡単に操作可能な方法を見つけたいのですが: 複数の部分文字をいくつかから抽出しますが、すべての文字列ではありません リストの要素として含まれています(各リスト要素はたった1つの長文字列で構成されています) それぞれの元の長文字列をこれらの複数...

1  RとPURRRを使用して、PMAPを持つリストのリストを使用して複数のデータフレームに参加する  ( Using r and purrr to join multiple dataframes using a list of lists with pmap ) 
PMAPを使用してリストに埋め込まれているデータフレームをまとめようとしています。 <事前> <コード> library(purrr) library(plyr) # Create a list of 5 data frames create_df <- f...

16  GGPLOT2はR 3.0.2にインストールできません  ( Ggplot2 fails to install on r 3 0 2 ) 
ubuntuでr 3.0.2にggplot2をインストールできません。 を実行したとき <事前> <コード> install.packages('ggplot2',dependencies = TRUE) 次のエラーを獲得します。 <事前> <コード> ...

6  引用された変数のDDPLYとスペース  ( Ddply and spaces in quoted variables ) 
DDPLYでスペースを使用することは可能ですか? 列名の多くのスペースを含むスプレッドシートからデータを使用していて、後でこのデータをオリジナルと同じ列名でエクスポートしたいと思います。 200以上の列があり、Make.Namesを使用すると、もちろん、適切...

2  2つの異なる問題を持つデータフレームに不完全なリストを解析する  ( Parsing incomplete lists into data frames with two different problems ) 
Rを介してWebデータを要求した場合は、jsonまたはXMLを使用することがよくあり、フィールドに値がない場合はフィールドが指定されていない場合があります。時々、データさえデータさえも、特定のインデックスの空のリストとして出てきます。だから、私はこれを2つの...

0  applyファミリを使用して、2つのリストからExcelファイルの2つの別々のシートにデータフレームを書き込む  ( Write data frames from two lists to two separate sheets of an excel file using a ) 
各ファイルを1つのディレクトリから2番目のディレクトリ内の各ファイルの2番目のシートにコピーするために、関数の適用ファミリを使用します。 私は多くのことを試み、次の作業を行うことによって終了しましたが、ディレクトリ内の単一のファイルのみに。そのフォルダ内のすべ...

7  要約とDDPLYのスピードアップ方法  ( How to speed up summarise and ddply ) 
私は200万行、15列のデータフレームを持っています。私はDDPLYでこれらの列の3つでグループ化したいです(3つすべてが要因で、これらの要因の780,000の固有の組み合わせがあります)、3列の重み付き平均(私のデータセットによって定義された重み付け)を取得...

0  2つのデータフレームを統合する  ( R merging two data frames ) 
マージしたい2つのデータフレームに問題がある。 1つはもう一方が大きいですが、それらは一般的な列名とrownamesを共有します。 私がしたいことは、各行と列の特定の要素によってそれらの両方をマージすることです。 例えば1データフレームを持っています。 <コー...

3  1つはPLYR出力幅からどのように要約されるのか  ( How does one make summarise from plyr output wide rather than long ) 
私はPLYRがデータフレームを複数のデータセットに分割し、次に各セットに対して同一の操作を実行する能力が大好きです。最良の部分は、それがあなたにそれがきちんとコンパクトにラベルされた表としての結果を示すときです。各()を使用して単一の線に計算の束を投げるのが大...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有