循环获取基本统计数据

时间:2013-12-07 19:17:12

标签: r

我正在寻找一种方法(代码)来加速我在R中的一些例程。由于我没有编程技巧,我在这里尝试一些帮助......

问题是:如何使用/设置循环来获得均值(实际上我正在寻找加权均值,由函数'weighted.mean {stats}'计算:http://stat.ethz.ch/R-manual/R-patched/library/stats/html/weighted.mean.html )对于所有预测变量('duration','initial.time','freq.initial'和'',由变量'spp'和'local'的级别组合定义的每个组(样本) freq.min')。 'n.indiv'是每个地区每个物种采样的个体数量,是每个样本应用加权平均值的重量(数据是伪复制的,因为同一个体在大多数情况下都是案例,抽样两次或更多次 - 见'id.indiv')。

我期待什么(?):地区'FO'物种'Aae'的加权平均值(对于所有预测因子);地区'MA'物种'Aae'的加权平均值(对于所有预测因子);地方'FO'物种'Aar'的加权平均值(对于所有预测因子);等等(直到我得到物种'Pma'在地方'FO'的加权平均值。)

提前感谢那些不遗余力地阅读和/或尝试解决问题的人。


数据:

spp id.indiv    local   n.indiv duration    initial.time    freq.initial    freq.min
Aae 1   FO  2   297 45.446  438 438
Aae 1   FO  2   296 46.438  383 383
Aae 1   FO  2   311 117.406 481 471
Aae 1   FO  2   276 118.537 503 463
Aae 1   FO  2   289 119.545 466 433
Aae 2   FO  2   288 4.469   445 412
Aae 2   FO  2   291 7.28    412 396
Aae 2   FO  2   277 8.218   370 370
Aae 3   MA  2   309 0.227   453 453
Aae 3   MA  2   314 1.876   350 350
Aae 3   MA  2   343 4.977   373 373
Aae 3   MA  2   312 15.283  445 445
Aae 3   MA  2   336 11.77   445 445
Aae 4   MA  2   317 4.154   431 431
Aae 4   MA  2   334 20.555  431 431
Aae 4   MA  2   325 13.903  454 454
Aae 4   MA  2   337 8.482   427 380
Aae 4   MA  2   338 10.586  443 388
Aar 1   FO  3   286 15.029  273 242
Aar 1   FO  3   239 20.61   381 381
Aar 2   FO  3   243 34.077  335 335
Aar 2   FO  3   516 43.662  345 301
Aar 3   FO  3   302 5.458   391 287
Aar 3   FO  3   553 9.746   426 252
Aar 3   FO  3   196 33.127  444 313
Aar 3   FO  3   273 39.578  374 252
Aar 4   FO  3   326 46.674  357 315
Aar 5   FO  3   495 8.445   295 240
Aau 1   FO  3   195 2.954   794 794
Aau 1   FO  3   207 17.324  758 758
Aau 1   FO  3   294 19.726  712 712
Aau 2   FO  3   203 17.049  762 762
Aau 2   FO  3   195 29.086  750 750
Aau 2   FO  3   196 45.24   708 708
Aau 3   FO  3   245 13.669  628 628
Aau 4   FO  3   265 104.038 883 883
Aau 5   FO  3   217 6.853   791 791
Aau 6   MA  3   173 0.369   713 713
Aau 6   MA  3   148 1.942   611 611
Aau 7   MA  3   174 1.963   482 482
Aau 7   MA  3   180 2.306   551 551
Aau 7   MA  3   180 3.835   505 505
Aau 8   MA  3   173 4.346   759 759
Aau 8   MA  3   177 11.864  777 777
Aau 8   MA  3   155 17.799  653 653
Aau 8   MA  3   163 40.313  635 635
Ale 1   FO  3   191 6.306   784 784
Ale 3   FO  3   194 3.158   650 650
Ale 3   FO  3   215 3.875   710 710
Ale 3   FO  3   208 4.22    592 592
Ale 3   FO  3   216 5.826   645 645
Ale 4   FO  3   225 113.572 730 730
Axa 1   BS  2   237 58.593  1561    480
Axa 1   BS  2   226 101.23  1029    432
Axa 1   BS  2   234 102.57  1064    460
Axa 1   BS  2   230 103.883 1038    429
Axa 2   BS  2   212 29.2    783 476
Axa 2   BS  2   202 19.005  1154    544
Axa 2   BS  2   190 23.161  956 742
Axa 2   BS  2   201 44.778  841 511
Axa 3   EM  3   176 0.175   1075    677
Axa 4   EM  3   184 0.134   700 646
Axa 4   EM  3   206 0.148   661 505
Axa 4   EM  3   189 0.148   827 535
Axa 4   EM  3   196 0.146   693 488
Axa 5   EM  3   203 0.136   780 420
Axa 5   EM  3   193 0.15    823 450
Axa 5   EM  3   199 0.148   1257    509
Axa 5   EM  3   206 0.123   897 437
Axa 5   EM  3   209 0.136   586 479
Bch 4   MA  3   123 6.231   1010    1010
Bch 4   MA  3   119 15.92   945 945
Bch 4   MA  3   121 20.847  1053    1053
Bch 5   MA  3   127 9.622   1111    1111
Bch 5   MA  3   135 19.766  1184    1184
Bch 5   MA  3   130 25.728  1304    1304
Bch 6   MA  3   144 4.391   1448    1448
Bch 6   MA  3   148 8.583   1107    1107
Bch 6   MA  3   149 8.816   1031    1031
Bch 1   UN  3   116 4.544   997 997
Bch 1   UN  3   123 10.011  906 906
Bch 1   UN  3   127 12.204  1133    1133
Bch 2   UN  3   124 4.871   1074    1074
Bch 2   UN  3   129 9.811   1198    1198
Bch 2   UN  3   122 2.151   1198    1198
Bch 3   UN  3   105 1.732   1266    1266
Bch 3   UN  3   102 4.67    928 928
Bch 3   UN  3   112 8.278   1034    1034
Dno 1   FO  2   223 11.763  296 296
Dno 1   FO  2   206 12.107  444 444
Dno 1   FO  2   207 123.724 336 336
Dno 1   FO  2   211 124.216 350 350
Dno 2   FO  2   193 20.527  511 511
Dno 2   FO  2   180 20.813  518 518
Dno 2   FO  2   182 26.485  423 423
Dno 2   FO  2   207 26.77   483 483
Dno 2   FO  2   188 56.531  518 518
Dno 2   FO  2   217 56.828  483 483
Dno 3   MA  2   209 6.245   346 346
Dno 3   MA  2   197 6.636   449 449
Dno 3   MA  2   202 10.656  456 456
Dno 3   MA  2   219 13.031  347 347
Dno 4   MA  2   161 110.292 488 488
Dno 4   MA  2   181 118.696 527 527
Dno 4   MA  2   156 136.282 537 537
Dno 4   MA  2   155 136.021 567 567
Fxa 1   FO  3   78  0.335   1700    1700
Fxa 1   FO  3   78  0.459   1758    1758
Fxa 1   FO  3   97  1.132   1873    1873
Fxa 1   FO  3   79  1.307   1672    1672
Fxa 1   FO  3   76  2.996   1858    1858
Fxa 2   FO  3   118 4.612   1203    1203
Fxa 2   FO  3   118 6.125   1063    1063
Fxa 2   FO  3   102 8.55    1231    1231
Fxa 3   FO  3   115 0.106   1604    1604
Fxa 3   FO  3   126 2.325   1363    1363
Fxa 3   FO  3   84  2.893   1931    1931
Fxa 4   UN  3   114 0.443   2224    2224
Fxa 4   UN  3   78  2.892   1784    1784
Fxa 5   UN  3   85  5.932   1396    1396
Fxa 5   UN  3   54  15.144  1450    1450
Fxa 6   UN  3   123 17.045  1421    1421
Fxa 6   UN  3   124 23.166  1557    1557
Fxa 6   UN  3   110 24.056  1694    1694
Oma 1   FO  1   151 2.796   260 260
Oma 1   FO  1   153 5.072   290 290
Oma 1   FO  1   139 6.39    333 333
Oma 1   FO  1   150 9.153   320 320
Oma 2   NA  1   170 0.957   309 309
Pma 1   FO  3   141 0.759   557 557
Pma 2   FO  3   131 39.58   606 606
Pma 2   FO  3   140 40.366  548 548
Pma 3   FO  3   137 14.396  600 600
Pma 3   FO  3   135 14.94   714 714
Pma 3   FO  3   134 15.492  759 759
Pma 3   FO  3   133 23.894  669 669

1 个答案:

答案 0 :(得分:1)

也许您可以使用ddply中的plyr,但如果速度很慢,那么data.table将是最佳选择,我相信您很快就会得到答案。

调用数据YouRdatA

library(plyr)

ddply(YouRdatA, .(id.indiv, local), function(x){
 data.frame( w.m.dur  = weighted.mean(x$duration, x$n.indiv, na.rm = TRUE),
             w.m.ini  = weighted.mean(x$initial.time, x$n.indiv,na.rm = TRUE),           
             w.m.fini = weighted.mean(x$freq.initial, x$n.indiv,na.rm = TRUE),
             w.m.fmin = weighted.mean(x$freq.min, x$n.indiv,na.rm = TRUE) 
            )
})

summarize

ddply(YouRdatA, .(id.indiv, local), summarize, 
             w.m.dur  = weighted.mean(duration, n.indiv, na.rm = TRUE),
             w.m.ini  = weighted.mean(initial.time, n.indiv,na.rm = TRUE),           
             w.m.fini = weighted.mean(freq.initial, n.indiv,na.rm = TRUE),
             w.m.fmin = weighted.mean(freq.min, n.indiv,na.rm = TRUE) 
            )