David MacKinnon
| Year | Age | Lvl / Team | PA | AVG/OBP/SLG | HR | SB | wRC+ | WAR | MLE AVG/OBP/SLG | |
|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | 26 | AALAA | 426 | .285/.383/.474 | 13 | 2 | 87 | — | .236/.310/.366 | |
| 2022 | 27 | AAAOAK | 346 | .318/.422/.585 | 15 | 2 | 114 | — | .252/.328/.435 | |
| 2022 | 27 | MLBOakland Athle… | 57 | .140/.232/.140 | 0 | 0 | 11 | -1.3 | ||
| 2024 | 29 | INTLPuerto Rico | 175 | .255/.355/.349 | 1 | 0 | 102 | — | ||
| 2025 | 30 | No MLB games played | ||||||||
| 2026 | 31 | No MLB games played | ||||||||
Career Stats + Projections
Methodology▸ how these numbers are built
All seasons translated to park-neutral MLB-equivalent (MLE) and combined per year. 2027 = full-season projection (no games played yet). 2028+ via Advanced Marcel + aging curve.
| Year | Age | Lvl | Team | MLB% | PA | AB | H | 2B | 3B | HR | BB | SO | HBP | SB | CS | AVG | OBP | SLG | OPS | ISO | BABIP | K% | BB% | wOBA | wRC+ | BAT | RUN | FLD | POS | REP | WAR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ▸ Career — actual stats, one row per stint (as recorded, no adjustments) | |||||||||||||||||||||||||||||||
| 2017 | 22 | ROK | Orem Owlz | — | 157 | 120 | 47 | 7 | 2 | 2 | 25 | 13 | 6 | 1 | 0 | 392 | 510 | 533 | 1.043 | 142 | 413 | 8 | 16 | 451 | 124 | — | — | — | — | — | — |
| 2018 | 23 | A+ | Inland Empire 66ers | — | 377 | 305 | 87 | 22 | 0 | 5 | 60 | 73 | 7 | 0 | 0 | 285 | 414 | 407 | 821 | 121 | 353 | 19 | 16 | 371 | 92 | — | — | — | — | — | — |
| 2018 | 23 | A | Burlington Bees | — | 147 | 111 | 29 | 7 | 0 | 1 | 35 | 30 | 0 | 0 | 0 | 261 | 435 | 351 | 787 | 90 | 350 | 20 | 24 | 371 | 74 | — | — | — | — | — | — |
| 2018 | 23 | INTL | Mesa Solar Sox | — | 53 | 40 | 7 | 2 | 0 | 0 | 12 | 13 | 0 | 1 | 0 | 175 | 365 | 225 | 590 | 50 | 250 | 25 | 23 | 292 | 84 | — | — | — | — | — | — |
| 2019 | 24 | A+ | Inland Empire 66ers | — | 77 | 57 | 8 | 1 | 0 | 0 | 19 | 18 | 0 | 0 | 0 | 140 | 355 | 158 | 513 | 18 | 200 | 23 | 25 | 271 | 27 | — | — | — | — | — | — |
| 2021 | 26 | AA | Rocket City Trash Pandas | — | 426 | 365 | 104 | 30 | 0 | 13 | 52 | 83 | 6 | 2 | 2 | 285 | 383 | 474 | 857 | 189 | 335 | 19 | 12 | 379 | 87 | — | — | — | — | — | — |
| 2022 | 27 | MLB | Oakland Athletics | — | 57 | 50 | 7 | 0 | 0 | 0 | 6 | 17 | 0 | 0 | 0 | 140 | 232 | 140 | 372 | 206 | 30 | 11 | 185 | 11 | -6 | +0 | -1 | -7 | +1 | -1.3 | |
| 2022 | 27 | AAA | Las Vegas Aviators | — | 346 | 289 | 92 | 24 | 4 | 15 | 49 | 63 | 3 | 2 | 2 | 318 | 422 | 585 | 1.007 | 266 | 356 | 18 | 14 | 431 | 114 | — | — | — | — | — | — |
| 2024 | 29 | INTL | Puerto Rico | — | 175 | 149 | 38 | 9 | 1 | 1 | 20 | 26 | 3 | 0 | 0 | 255 | 355 | 349 | 704 | 94 | 296 | 15 | 11 | 319 | 102 | — | — | — | — | — | — |
| ▸ Career Totals (raw MLB only — historical actual) | |||||||||||||||||||||||||||||||
| MLB Career | — | — | 57 | 50 | 7 | 0 | 0 | 0 | 6 | 17 | 0 | 0 | 0 | 140 | 232 | 140 | 372 | 206 | 30 | 11 | 185 | 11 | -6 | +0 | -1 | -7 | +1 | -1.3 | |||
| ▸ Career — adjusted (every ACTUAL line translated to park/league-neutral MLB equivalents) | |||||||||||||||||||||||||||||||
| 2017 | 22 | ROK MLE | Orem Owlz | — | 157 | 132 | 41 | 5 | 2 | 2 | 15 | 19 | 6 | 1 | 0 | 311 | 405 | 424 | 829 | 114 | 320 | 12 | 10 | 351 | 124 | — | — | — | — | — | — |
| 2018 | 23 | A+ MLE | Inland Empire 66ers | — | 377 | 322 | 78 | 17 | 0 | 5 | 43 | 94 | 7 | 0 | 0 | 242 | 344 | 342 | 686 | 99 | 310 | 25 | 11 | 304 | 92 | — | — | — | — | — | — |
| 2018 | 23 | A MLE | Burlington Bees | — | 147 | 124 | 25 | 5 | 0 | 1 | 23 | 42 | 0 | 0 | 0 | 202 | 327 | 266 | 593 | 65 | 299 | 29 | 16 | 277 | 74 | — | — | — | — | — | — |
| 2019 | 24 | A+ MLE | Inland Empire 66ers | — | 77 | 62 | 7 | 1 | 0 | 0 | 14 | 24 | 0 | 0 | 0 | 113 | 276 | 129 | 405 | 16 | 173 | 31 | 18 | 208 | 27 | — | — | — | — | — | — |
| 2021 | 26 | AA MLE | Rocket City Trash Pandas | — | 426 | 382 | 90 | 26 | 0 | 8 | 35 | 100 | 6 | 2 | 2 | 236 | 310 | 366 | 676 | 131 | 291 | 23 | 8 | 297 | 87 | — | — | — | — | — | — |
| 2022 | 27 | MLB MLE | Oakland Athletics | — | 57 | 50 | 7 | 0 | 0 | 0 | 6 | 17 | 0 | 0 | 0 | 140 | 232 | 140 | 372 | 206 | 30 | 11 | 185 | 11 | -6 | +0 | -1 | -7 | +1 | -1.3 | |
| 2022 | 27 | AAA MLE | Las Vegas Aviators | — | 346 | 306 | 77 | 18 | 4 | 10 | 32 | 75 | 3 | 2 | 2 | 252 | 328 | 435 | 763 | 183 | 294 | 22 | 9 | 336 | 114 | — | — | — | — | — | — |
| 2017 | 22 | ROK MLE | Orem Owlz | — | 157 | 132 | 41 | 5 | 2 | 2 | 15 | 19 | 6 | 1 | 0 | 311 | 405 | 424 | 829 | 114 | 339 | 12 | 10 | 351 | 124 | — | — | — | — | — | — |
| 2017 | 22 | ROK RAW | Orem Owlz | — | 157 | 120 | 47 | 7 | 2 | 2 | 25 | 13 | 6 | 1 | 0 | 392 | 510 | 533 | 1.043 | 142 | 413 | 8 | 16 | 451 | 124 | — | — | — | — | — | — |
| 2018 | 23 | A+ MLE | 3 teams | — | 577 | 492 | 113 | 24 | 0 | 6 | 72 | 150 | 7 | 1 | 0 | 230 | 336 | 315 | 651 | 85 | 313 | 26 | 12 | 296 | 87 | — | — | — | — | — | — |
| 2018 | 23 | A+ RAW | 3 teams | — | 577 | 456 | 123 | 31 | 0 | 6 | 107 | 116 | 7 | 1 | 0 | 270 | 415 | 377 | 792 | 107 | 344 | 20 | 19 | 364 | 87 | — | — | — | — | — | — |
| 2019 | 24 | A+ MLE | Inland Empire 66ers | — | 77 | 62 | 7 | 1 | 0 | 0 | 14 | 24 | 0 | 0 | 0 | 113 | 276 | 129 | 405 | 16 | 179 | 31 | 18 | 208 | 27 | — | — | — | — | — | — |
| 2019 | 24 | A+ RAW | Inland Empire 66ers | — | 77 | 57 | 8 | 1 | 0 | 0 | 19 | 18 | 0 | 0 | 0 | 140 | 355 | 158 | 513 | 18 | 200 | 23 | 25 | 271 | 27 | — | — | — | — | — | — |
| 2021 | 26 | AA MLE | Rocket City Trash Pandas | — | 426 | 382 | 90 | 26 | 0 | 8 | 35 | 100 | 6 | 2 | 2 | 236 | 310 | 366 | 676 | 131 | 296 | 23 | 8 | 297 | 87 | — | — | — | — | — | — |
| 2021 | 26 | AA RAW | Rocket City Trash Pandas | — | 426 | 365 | 104 | 30 | 0 | 13 | 52 | 83 | 6 | 2 | 2 | 285 | 383 | 474 | 857 | 189 | 335 | 19 | 12 | 379 | 87 | — | — | — | — | — | — |
| 2022 | 27 | AAA MLE | 2 teams | — | 403 | 356 | 84 | 18 | 4 | 10 | 38 | 92 | 3 | 2 | 2 | 236 | 315 | 393 | 708 | 157 | 285 | 23 | 9 | 315 | 99 | — | — | — | — | — | — |
| 2022 | 27 | AAA RAW | 2 teams | — | 403 | 339 | 99 | 24 | 4 | 15 | 55 | 80 | 3 | 2 | 2 | 292 | 395 | 519 | 915 | 227 | 336 | 20 | 14 | 396 | 99 | — | — | — | — | — | — |
| 2024 | 29 | INTL MLE | Puerto Rico | — | 175 | 149 | 38 | 9 | 1 | 1 | 20 | 26 | 3 | 0 | 0 | 255 | 355 | 349 | 704 | 94 | 296 | 15 | 11 | — | — | — | — | — | — | — | — |
| 2024 | 29 | INTL RAW | Puerto Rico | — | 175 | 149 | 38 | 9 | 1 | 1 | 20 | 26 | 3 | 0 | 0 | 255 | 355 | 349 | 704 | 94 | 296 | 15 | 11 | 319 | 102 | — | — | — | — | — | — |
| 2017 | 22 | ROK MLE | Orem Owlz | — | 157 | 135 | 41 | 5 | 2 | 2 | 15 | 19 | 6 | 1 | 0 | 304 | 405 | 415 | 820 | 111 | 320 | 12 | 10 | 351 | 124 | — | — | — | — | — | — |
| 2018 | 23 | A+ MLE | 3 teams | — | 577 | 493 | 113 | 24 | 0 | 6 | 72 | 150 | 7 | 1 | 0 | 229 | 336 | 314 | 651 | 85 | 307 | 26 | 12 | 296 | 87 | — | — | — | — | — | — |
| 2019 | 24 | A+ MLE | Inland Empire 66ers | — | 77 | 63 | 7 | 1 | 0 | 0 | 14 | 24 | 0 | 0 | 0 | 111 | 276 | 127 | 403 | 16 | 173 | 31 | 18 | 208 | 27 | — | — | — | — | — | — |
| 2021 | 26 | AA MLE | Rocket City Trash Pandas | — | 426 | 382 | 90 | 26 | 0 | 8 | 35 | 100 | 6 | 2 | 2 | 236 | 310 | 366 | 676 | 131 | 291 | 23 | 8 | 297 | 87 | — | — | — | — | — | — |
| 2022 | 27 | AAA MLE | 2 teams | — | 403 | 359 | 84 | 18 | 4 | 10 | 38 | 92 | 3 | 2 | 2 | 234 | 315 | 390 | 705 | 156 | 282 | 23 | 9 | 315 | 99 | — | — | — | — | — | — |
| ▸ Career Totals | |||||||||||||||||||||||||||||||
| ▸ Career totals — MLB only (actual + projected) | |||||||||||||||||||||||||||||||
| Career | — | A+C | — | 57 | 50 | 7 | 0 | 0 | 0 | 6 | 17 | 0 | 0 | 0 | 140 | 232 | 140 | 372 | 206 | 30 | 11 | 185 | 71 | -6 | +0 | -1 | -7 | +1 | -1.3 | ||
| / 162G | — | A+C | — | 650 | 570 | 80 | 0 | 0 | 0 | 68 | 194 | 0 | 0 | 0 | 140 | 232 | 140 | 372 | 207 | 30 | 10 | 185 | 71 | -69 | +0 | -13 | -82 | +14 | -15.3 | ||
| Career | — | MLE | — | 1815 | 1573 | 373 | 83 | 7 | 27 | 194 | 411 | 25 | 6 | 4 | 237 | 330 | 350 | 681 | 113 | 299 | 23 | 11 | 273 | 71 | -6 | +0 | -1 | -7 | +1 | -1.3 | |
| / 162G | — | MLE | — | 650 | 563 | 135 | 30 | 3 | 10 | 69 | 147 | 9 | 2 | 1 | 240 | 332 | 357 | 689 | 117 | 302 | 23 | 11 | 273 | 71 | -69 | +0 | -13 | -82 | +14 | -15.3 | |
How the minor-league lines were translated
One row per minor-league stint. Open a row to see each step: the raw rate, the park adjustment, the league/level factor, the age adjustment (hitters) and the resulting MLE rate. Factors are the same ones listed on the MLE Factors page.
2022 AAALas Vegas Aviators · 346 PAwOBA .424 → .336 (−88)K% 18.2% → 21.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 18.21% | ÷1.009 | ×1.200 | — | — | 21.65% |
| BB% (unintentional) /PA | 13.29% | ÷0.992 | ×0.690 | — | ×0.992 | 9.17% |
| HBP% /PA | 0.87% | — | ×0.940 | — | ×0.992 | 0.81% |
| Singles /BIP | 21.68% | ÷0.995 | ×0.930 | ×0.956 | ×0.992 | 19.22% |
| Doubles /BIP | 10.62% | ÷1.088 | ×0.830 | ×0.956 | ×0.992 | 7.68% |
| Triples /BIP | 1.77% | ÷0.900 | ×0.970 | ×0.956 | ×0.992 | 1.81% |
| Home runs /BIP | 6.64% | ÷1.075 | ×0.700 | — | ×0.992 | 4.29% |
Factors used: league row International League. Park (home-season share, regressed): HR 115, 1B 99, 2B 118, 3B 80, K 102, BB 98 — applied at half strength. Age: age 28 vs a level average of 27.2 → −0.8% on BB/HBP/hit rates (0.8 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.956.
Result: wOBA .424 → .336; ISO .266 → .198; BABIP .356 → .294. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2021 AARocket City Trash Pandas · 426 PAwOBA .372 → .297 (−74)K% 19.5% → 23.4%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 19.48% | ÷1.018 | ×1.220 | — | — | 23.35% |
| BB% (unintentional) /PA | 12.21% | ÷0.992 | ×0.690 | — | ×0.978 | 8.31% |
| HBP% /PA | 1.41% | — | ×0.850 | — | ×0.978 | 1.17% |
| Singles /BIP | 21.63% | ÷0.985 | ×0.940 | ×0.962 | ×0.978 | 19.41% |
| Doubles /BIP | 10.64% | ÷0.947 | ×0.870 | ×0.962 | ×0.978 | 9.19% |
| Triples /BIP | 0.00% | ÷1.150 | ×0.920 | ×0.962 | ×0.978 | 0.00% |
| Home runs /BIP | 4.61% | ÷1.249 | ×0.780 | — | ×0.978 | 2.82% |
Factors used: level-wide AA factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 150, 1B 97, 2B 89, 3B 130, K 104, BB 98 — applied at half strength. Age: age 27 vs a level average of 24.8 → −2.2% on BB/HBP/hit rates (2.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.962.
Result: wOBA .372 → .297; ISO .189 → .138; BABIP .335 → .291. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2019 A+Inland Empire 66ers · 77 PAwOBA .270 → .208 (−62)K% 23.4% → 31.4%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 23.38% | ÷0.997 | ×1.340 | — | — | 31.43% |
| BB% (unintentional) /PA | 24.68% | ÷0.968 | ×0.710 | — | ×0.978 | 17.71% |
| HBP% /PA | 0.00% | — | ×0.790 | — | ×0.978 | 0.00% |
| Singles /BIP | 17.95% | ÷1.024 | ×0.910 | — | ×0.978 | 15.61% |
| Doubles /BIP | 2.56% | ÷0.985 | ×0.820 | — | ×0.978 | 2.09% |
| Triples /BIP | 0.00% | ÷1.150 | ×0.760 | — | ×0.978 | 0.00% |
| Home runs /BIP | 0.00% | ÷0.939 | ×0.920 | — | ×0.978 | 0.00% |
Factors used: league row CAL. Park (home-season share, regressed): HR 88, 1B 105, 2B 97, 3B 130, K 99, BB 94 — applied at half strength. Age: age 25 vs a level average of 22.8 → −2.2% on BB/HBP/hit rates (2.2 yr older than average).
Result: wOBA .270 → .208; ISO .018 → .014; BABIP .200 → .173. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2018 A+Inland Empire 66ers · 377 PAwOBA .367 → .304 (−63)K% 19.4% → 24.9%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 19.36% | ÷1.044 | ×1.340 | — | — | 24.86% |
| BB% (unintentional) /PA | 15.92% | ÷0.986 | ×0.710 | — | ×0.988 | 11.33% |
| HBP% /PA | 1.86% | — | ×0.790 | — | ×0.988 | 1.45% |
| Singles /BIP | 25.86% | ÷0.977 | ×0.910 | ×1.005 | ×0.988 | 23.92% |
| Doubles /BIP | 9.48% | ÷1.087 | ×0.820 | ×1.005 | ×0.988 | 7.10% |
| Triples /BIP | 0.00% | ÷0.978 | ×0.760 | ×1.005 | ×0.988 | 0.00% |
| Home runs /BIP | 2.16% | ÷0.978 | ×0.920 | — | ×0.988 | 2.00% |
Factors used: league row CAL. Park (home-season share, regressed): HR 96, 1B 95, 2B 117, 3B 96, K 109, BB 97 — applied at half strength. Age: age 24 vs a level average of 22.8 → −1.2% on BB/HBP/hit rates (1.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×1.005.
Result: wOBA .367 → .304; ISO .121 → .101; BABIP .353 → .310. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2018 ABurlington Bees · 147 PAwOBA .363 → .277 (−86)K% 20.4% → 28.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 20.41% | ÷0.970 | ×1.360 | — | — | 28.62% |
| BB% (unintentional) /PA | 23.81% | ÷1.042 | ×0.690 | — | ×0.980 | 15.46% |
| HBP% /PA | 0.00% | — | ×0.780 | — | ×0.980 | 0.00% |
| Singles /BIP | 25.93% | ÷1.009 | ×0.920 | ×1.009 | ×0.980 | 23.39% |
| Doubles /BIP | 8.64% | ÷1.147 | ×0.830 | ×1.009 | ×0.980 | 6.19% |
| Triples /BIP | 0.00% | ÷0.900 | ×0.910 | ×1.009 | ×0.980 | 0.00% |
| Home runs /BIP | 1.23% | ÷0.907 | ×0.800 | — | ×0.980 | 1.07% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 81, 1B 102, 2B 129, 3B 80, K 94, BB 108 — applied at half strength. Age: age 24 vs a level average of 22.0 → −2.0% on BB/HBP/hit rates (2.0 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×1.009.
Result: wOBA .363 → .277; ISO .090 → .070; BABIP .350 → .299. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2017 ROKOrem Owlz · 157 PAwOBA .452 → .351 (−101)K% 8.3% → 11.9%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 8.28% | ÷1.000 | ×1.440 | — | — | 11.92% |
| BB% (unintentional) /PA | 15.92% | ÷1.000 | ×0.610 | — | ×0.965 | 9.37% |
| HBP% /PA | 3.82% | — | ×0.720 | — | ×0.965 | 2.66% |
| Singles /BIP | 33.64% | ÷1.000 | ×0.820 | ×1.004 | ×0.965 | 26.73% |
| Doubles /BIP | 6.54% | ÷1.000 | ×0.720 | ×1.004 | ×0.965 | 4.56% |
| Triples /BIP | 1.87% | ÷1.000 | ×0.720 | ×1.004 | ×0.965 | 1.30% |
| Home runs /BIP | 1.87% | ÷1.000 | ×0.750 | — | ×0.965 | 1.35% |
Factors used: league row PIO. Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 23 vs a level average of 19.5 → −3.5% on BB/HBP/hit rates (3.5 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×1.004.
Result: wOBA .452 → .351; ISO .142 → .112; BABIP .413 → .320. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
Not traceable per stint: some stints lack the counting stats the component translation needs. Level-wide factors that apply instead — .