我正在寻找一种方法(代码)来加速我在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
答案 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)
)