我正在努力学习一些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("-------------------------------------")
  }
}

在这段代码中,我将匹配各种条件的索引放入列表中,然后在这两个列表上有一个嵌套的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

然后我想把嵌套循环的每次迭代的所有结果放到一个数据框中,所以我将统计信息( rmseerr_mean 等)作为列和每个不同的条件组合( sets$Allcats_excluded$Any 等)作为行 . 当然,不知何故,我需要在此数据框中添加额外的列,以准确说明该行使用的条件 .

我很确定我这样做的方式并不是最好的方式,但我不确定如何以“正确的R方式”进行此操作 . 我故意将我的统计计算放在一个函数中,以便我可以使用apply(或类似的),但我看不出我可以应用这个 . 如果我可以在数据框中应用其中已有类别的所有组合(请参见下面的草图),那么这将是一个良好的开端,但我不知道如何创建其中一个 .

+-----+-----------+
| 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  |
+-----+-----------+------+--------+-------+

(虽然在现实生活中,各种标准将有五列,统计数据约为十列)

我希望这有一定道理 - 任何建议都会受到高度赞赏 .