apply 一連の関数のいずれかを使用して記述できるはずのいくつかの R コードに苦労していますが、その方法がわかりません。
測定対象の多くのサイトをリストするデータフレームがあります。このデータ フレームには、さまざまなメタデータ (サイト名を含む) と、そのサイトの集計統計が含まれています。メタデータの値を使用してサイトのさまざまなグループを選択し、元の生データ (つまり、各サイトからのすべての観察) を取得し、その統計を計算する必要があります。
これらのグループの選択基準は非常に複雑で、基本的にはさまざまなサブセットのあらゆる可能な組み合わせを行っているため、インデックスの交差を介してこれを行うのが最善であると考えました。したがって、私のコードは次のようになります。
# Calculate indices for each of the selection criteria
sets = list(All=1:nrow(df), UK=which(ClassifiedValAERONET$UK == 1))
cat_excluded = list(None=1:nrow(df), Separated=which(ClassifiedValAERONET$Category1_SmallIsland == 0 & ClassifiedValAERONET$Category2_SeparatedLandMass == 0))
# Loop over all combinations of the categories above,
# intersect and then calculate the statistics
for (i in 1:length(sets))
{
for (j in 1:length(cat_excluded))
{
ind = intersect(unlist(sets[i]), unlist(cat_excluded[j]))
ind <- unlist(ind)
print(get_stats(ind))
print("-------------------------------------")
}
}
このコードでは、さまざまな条件に一致するインデックスをリストに入れ、これら 2 つのリストに対してネストされた for ループを作成し (すべての組み合わせを取得するため)、インデックスを交差させて両方の条件に一致する行を取得し、これらを関数に渡します。これらのインデックスを持つステーションの元のデータをすべて抽出し、統計を計算します。この関数の結果は、さまざまな統計を含むリストです。
List of 8
$ rmse : num 1.5
$ err_mean : num 0.631
$ err_sd : num 1.37
$ perc_err_mean: num 3.79
$ perc_err_sd : num 10.1
$ m : num 0.949
$ R2 : num 0.993
$ n : int 9163
次に、ネストされたループの各反復からのすべての結果を 1 つのデータ フレームに入れたいので、統計 (rmse
など) を列として、err_mean
条件のさまざまな組み合わせ (など) を行として持ちます。もちろん、このデータ フレームに列を追加して、その行にどの条件が使用されたかを正確に示す必要があります。sets$All
cats_excluded$Any
私がこれを行っている方法が最善の方法ではないと確信していますが、「適切なRの方法」でこれを行う方法がわかりません。apply (または同様のもの) で使用できるように、意図的に統計計算を関数に入れましたが、これを何に適用できるかわかりません。カテゴリのすべての組み合わせが既に含まれているデータ フレームに適用できれば (下のスケッチを参照)、それは良い出発点ですが、それらの 1 つを作成する方法がわかりません。
+-----+-----------+
| Set | Excluded |
+-----+-----------+
| All | None |
| All | Separated |
| UK | None |
| UK | Separated |
+-----+-----------+
理想的な最終結果は次のようになります。
+-----+-----------+------+--------+-------+
| Set | Excluded | RMSE | Perc_E | Max_E |
+-----+-----------+------+--------+-------+
| All | None | 2.53 | 0.65 | 34.5 |
| All | Separated | 1.87 | 0.54 | 9.87 |
| UK | None | 4.53 | 0.1 | 3.62 |
| UK | Separated | 1.23 | 0.87 | 6.78 |
+-----+-----------+------+--------+-------+
(実際には、さまざまな基準に 5 つの列があり、統計には約 10 の列があります)
これが何らかの意味を成していることを願っています - どんなアドバイスでも大歓迎です.