Zac Law
| Year | Age | Lvl / Team | PA | AVG/OBP/SLG | HR | SB | wRC+ | WAR | MLE AVG/OBP/SLG |
|---|---|---|---|---|---|---|---|---|---|
| 2017 | 21 | INTLPerth Heat | 53 | .333/.434/.689 | 3 | 2 | 212 | — | |
| 2018 | 22 | A+/A2 orgs | 217 | .277/.353/.397 | 4 | 8 | 76 | — | .233/.300/.318 |
| 2019 | 23 | A+/ROK2 orgs | 109 | .211/.306/.263 | 0 | 1 | 30 | — | .163/.241/.204 |
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) | |||||||||||||||||||||||||||||||
| 2014 | 18 | ROK | GCL Rays | — | 116 | 102 | 26 | 5 | 2 | 0 | 8 | 18 | 3 | 5 | 0 | 255 | 327 | 343 | 671 | 88 | 299 | 16 | 7 | 299 | 42 | — | — | — | — | — | — |
| 2015 | 19 | ROK | Princeton Rays | — | 287 | 256 | 69 | 10 | 2 | 8 | 14 | 42 | 10 | 12 | 8 | 270 | 332 | 418 | 750 | 148 | 293 | 15 | 5 | 328 | 53 | — | — | — | — | — | — |
| 2016 | 20 | A | Bowling Green Hot Rods | — | 478 | 432 | 109 | 20 | 3 | 4 | 27 | 95 | 6 | 19 | 9 | 252 | 305 | 340 | 646 | 88 | 308 | 20 | 6 | 285 | 49 | — | — | — | — | — | — |
| 2017 | 21 | INTL | Perth Heat | — | 53 | 45 | 15 | 7 | 0 | 3 | 3 | 10 | 5 | 2 | 1 | 333 | 434 | 689 | 1.123 | 356 | 375 | 19 | 6 | 482 | 212 | — | — | — | — | — | — |
| 2018 | 22 | A+ | Charlotte Stone Crabs | — | 103 | 88 | 22 | 2 | 2 | 1 | 7 | 14 | 4 | 3 | 0 | 250 | 333 | 352 | 686 | 102 | 276 | 14 | 7 | 302 | 63 | — | — | — | — | — | — |
| 2018 | 22 | A | Bowling Green Hot Rods | — | 114 | 96 | 29 | 4 | 0 | 3 | 8 | 13 | 3 | 5 | 0 | 302 | 370 | 438 | 808 | 135 | 306 | 11 | 7 | 343 | 87 | — | — | — | — | — | — |
| 2019 | 23 | A+ | Charlotte Stone Crabs | — | 84 | 72 | 15 | 4 | 0 | 0 | 7 | 20 | 4 | 1 | 0 | 208 | 313 | 264 | 577 | 56 | 283 | 24 | 8 | 273 | 38 | — | — | — | — | — | — |
| 2019 | 23 | ROK | GCL Rays | — | 25 | 23 | 5 | 1 | 0 | 0 | 2 | 3 | 0 | 0 | 0 | 217 | 280 | 261 | 541 | 43 | 250 | 12 | 8 | 252 | 5 | — | — | — | — | — | — |
| ▸ Career — adjusted (every ACTUAL line translated to park/league-neutral MLB equivalents) | |||||||||||||||||||||||||||||||
| 2014 | 18 | ROK MLE | GCL Rays | — | 116 | 106 | 21 | 4 | 1 | 0 | 4 | 26 | 3 | 5 | 0 | 198 | 248 | 255 | 503 | 57 | 248 | 22 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2015 | 19 | ROK MLE | Princeton Rays | — | 287 | 261 | 54 | 7 | 1 | 6 | 9 | 60 | 10 | 12 | 8 | 207 | 261 | 310 | 571 | 103 | 233 | 21 | 3 | 246 | 53 | — | — | — | — | — | — |
| 2016 | 20 | A MLE | Bowling Green Hot Rods | — | 478 | 440 | 96 | 17 | 3 | 3 | 19 | 127 | 6 | 19 | 9 | 218 | 260 | 291 | 551 | 73 | 280 | 27 | 4 | 240 | 49 | — | — | — | — | — | — |
| 2018 | 22 | A+ MLE | Charlotte Stone Crabs | — | 103 | 90 | 19 | 2 | 1 | 1 | 5 | 20 | 4 | 3 | 0 | 211 | 283 | 289 | 572 | 78 | 242 | 19 | 5 | 262 | 63 | — | — | — | — | — | — |
| 2018 | 22 | A MLE | Bowling Green Hot Rods | — | 114 | 99 | 25 | 3 | 0 | 2 | 6 | 18 | 3 | 5 | 0 | 253 | 315 | 343 | 658 | 91 | 259 | 16 | 5 | 297 | 87 | — | — | — | — | — | — |
| 2019 | 23 | A+ MLE | Charlotte Stone Crabs | — | 84 | 74 | 12 | 3 | 0 | 0 | 5 | 27 | 4 | 1 | 0 | 162 | 253 | 203 | 456 | 41 | 260 | 32 | 6 | 224 | 38 | — | — | — | — | — | — |
| 2019 | 23 | ROK MLE | GCL Rays | — | 25 | 24 | 4 | 1 | 0 | 0 | 1 | 4 | 0 | 0 | 0 | 167 | 200 | 208 | 408 | 42 | 193 | 16 | 4 | 175 | 5 | — | — | — | — | — | — |
| 2014 | 18 | ROK MLE | GCL Rays | — | 116 | 106 | 21 | 4 | 1 | 0 | 4 | 26 | 3 | 5 | 0 | 198 | 248 | 255 | 503 | 57 | 253 | 22 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2014 | 18 | ROK RAW | GCL Rays | — | 116 | 102 | 26 | 5 | 2 | 0 | 8 | 18 | 3 | 5 | 0 | 255 | 327 | 343 | 671 | 88 | 299 | 16 | 7 | 299 | 42 | — | — | — | — | — | — |
| 2015 | 19 | ROK MLE | Princeton Rays | — | 287 | 261 | 54 | 7 | 1 | 6 | 9 | 60 | 10 | 12 | 8 | 207 | 261 | 310 | 571 | 103 | 244 | 21 | 3 | 246 | 53 | — | — | — | — | — | — |
| 2015 | 19 | ROK RAW | Princeton Rays | — | 287 | 256 | 69 | 10 | 2 | 8 | 14 | 42 | 10 | 12 | 8 | 270 | 332 | 418 | 750 | 148 | 293 | 15 | 5 | 328 | 53 | — | — | — | — | — | — |
| 2016 | 20 | A MLE | Bowling Green Hot Rods | — | 478 | 440 | 96 | 17 | 3 | 3 | 19 | 127 | 6 | 19 | 9 | 218 | 260 | 291 | 551 | 73 | 292 | 27 | 4 | 240 | 49 | — | — | — | — | — | — |
| 2016 | 20 | A RAW | Bowling Green Hot Rods | — | 478 | 432 | 109 | 20 | 3 | 4 | 27 | 95 | 6 | 19 | 9 | 252 | 305 | 340 | 646 | 88 | 308 | 20 | 6 | 285 | 49 | — | — | — | — | — | — |
| 2017 | 21 | INTL MLE | Perth Heat | — | 53 | 45 | 15 | 7 | 0 | 3 | 3 | 10 | 5 | 2 | 1 | 333 | 434 | 689 | 1.123 | 356 | 375 | 19 | 6 | — | — | — | — | — | — | — | — |
| 2017 | 21 | INTL RAW | Perth Heat | — | 53 | 45 | 15 | 7 | 0 | 3 | 3 | 10 | 5 | 2 | 1 | 333 | 434 | 689 | 1.123 | 356 | 375 | 19 | 6 | 482 | 212 | — | — | — | — | — | — |
| 2018 | 22 | A MLE | 2 teams | — | 217 | 189 | 45 | 5 | 1 | 4 | 11 | 38 | 7 | 8 | 0 | 238 | 304 | 339 | 643 | 101 | 265 | 18 | 5 | 280 | 76 | — | — | — | — | — | — |
| 2018 | 22 | A RAW | 2 teams | — | 217 | 184 | 51 | 6 | 2 | 4 | 15 | 27 | 7 | 8 | 0 | 277 | 353 | 397 | 749 | 120 | 292 | 12 | 7 | 323 | 76 | — | — | — | — | — | — |
| 2019 | 23 | A+ MLE | 2 teams | — | 109 | 98 | 16 | 4 | 0 | 0 | 6 | 32 | 4 | 1 | 0 | 163 | 241 | 204 | 445 | 41 | 239 | 29 | 6 | 213 | 30 | — | — | — | — | — | — |
| 2019 | 23 | A+ RAW | 2 teams | — | 109 | 95 | 20 | 5 | 0 | 0 | 9 | 23 | 4 | 1 | 0 | 211 | 306 | 263 | 569 | 53 | 274 | 21 | 8 | 268 | 30 | — | — | — | — | — | — |
| 2014 | 18 | ROK MLE | GCL Rays | — | 116 | 108 | 21 | 4 | 1 | 0 | 4 | 26 | 3 | 5 | 0 | 194 | 248 | 250 | 498 | 56 | 248 | 22 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2015 | 19 | ROK MLE | Princeton Rays | — | 287 | 266 | 54 | 7 | 1 | 6 | 9 | 60 | 10 | 12 | 8 | 203 | 261 | 305 | 565 | 102 | 233 | 21 | 3 | 246 | 53 | — | — | — | — | — | — |
| 2016 | 20 | A MLE | Bowling Green Hot Rods | — | 478 | 450 | 96 | 17 | 3 | 3 | 19 | 127 | 6 | 19 | 9 | 213 | 260 | 284 | 545 | 71 | 280 | 27 | 4 | 240 | 49 | — | — | — | — | — | — |
| 2018 | 22 | A MLE | 2 teams | — | 217 | 197 | 45 | 5 | 1 | 4 | 11 | 38 | 7 | 8 | 0 | 228 | 304 | 325 | 629 | 96 | 251 | 18 | 5 | 280 | 76 | — | — | — | — | — | — |
| 2019 | 23 | A+ MLE | 2 teams | — | 109 | 98 | 16 | 4 | 0 | 0 | 6 | 32 | 4 | 1 | 0 | 163 | 241 | 204 | 445 | 41 | 245 | 29 | 6 | 213 | 30 | — | — | — | — | — | — |
| ▸ Career Totals | |||||||||||||||||||||||||||||||
| Career | — | MLE | — | 1260 | 1139 | 247 | 44 | 6 | 16 | 52 | 293 | 35 | 47 | 18 | 217 | 272 | 308 | 581 | 91 | 271 | 23 | 4 | 235 | 45 | -82 | +2 | +0 | +4 | +27 | -4.9 | |
| / 162G | — | MLE | — | 650 | 588 | 127 | 23 | 3 | 8 | 27 | 151 | 18 | 24 | 9 | 216 | 272 | 306 | 578 | 90 | 270 | 23 | 4 | 235 | 45 | -42 | +1 | +0 | +2 | +14 | -2.5 | |
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.
2019 A+Charlotte Stone Crabs · 84 PAwOBA .270 → .224 (−45)K% 23.8% → 32.7%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 23.81% | ÷1.033 | ×1.420 | — | — | 32.73% |
| BB% (unintentional) /PA | 8.33% | ÷1.018 | ×0.750 | — | ×0.998 | 6.13% |
| HBP% /PA | 4.76% | — | ×0.930 | — | ×0.998 | 4.42% |
| Singles /BIP | 21.15% | ÷1.008 | ×0.920 | — | ×0.998 | 19.26% |
| Doubles /BIP | 7.69% | ÷1.011 | ×0.960 | — | ×0.998 | 7.29% |
| Triples /BIP | 0.00% | ÷0.900 | ×0.810 | — | ×0.998 | 0.00% |
| Home runs /BIP | 0.00% | ÷0.939 | ×0.880 | — | ×0.998 | 0.00% |
Factors used: league row FSL. Park (home-season share, regressed): HR 88, 1B 102, 2B 102, 3B 80, K 107, BB 104 — applied at half strength. Age: age 23 vs a level average of 22.8 → −0.2% on BB/HBP/hit rates (0.2 yr older than average).
Result: wOBA .270 → .224; ISO .056 → .048; BABIP .283 → .260. 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 ROKGCL Rays · 25 PAwOBA .246 → .175 (−71)K% 12.0% → 17.3%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 12.00% | ÷1.000 | ×1.440 | — | — | 17.28% |
| BB% (unintentional) /PA | 8.00% | ÷1.000 | ×0.620 | — | ×0.965 | 4.79% |
| HBP% /PA | 0.00% | — | ×0.720 | — | ×0.965 | 0.00% |
| Singles /BIP | 20.00% | ÷1.000 | ×0.820 | — | ×0.965 | 15.83% |
| Doubles /BIP | 5.00% | ÷1.000 | ×0.720 | — | ×0.965 | 3.47% |
| Triples /BIP | 0.00% | ÷1.000 | ×0.720 | — | ×0.965 | 0.00% |
| Home runs /BIP | 0.00% | ÷1.000 | ×0.780 | — | ×0.965 | 0.00% |
Factors used: level-wide ROK factors (no league-specific row for this league/era). 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).
Result: wOBA .246 → .175; ISO .043 → .029; BABIP .250 → .193. 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 ABowling Green Hot Rods · 114 PAwOBA .349 → .297 (−52)K% 11.4% → 15.5%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 11.40% | ÷1.000 | ×1.360 | — | — | 15.51% |
| BB% (unintentional) /PA | 7.02% | ÷0.991 | ×0.690 | — | — | 4.89% |
| HBP% /PA | 2.63% | — | ×0.780 | — | — | 2.05% |
| Singles /BIP | 26.51% | ÷1.004 | ×0.920 | ×0.950 | — | 23.07% |
| Doubles /BIP | 4.82% | ÷1.057 | ×0.830 | ×0.950 | — | 3.60% |
| Triples /BIP | 0.00% | ÷0.900 | ×0.910 | ×0.950 | — | 0.00% |
| Home runs /BIP | 3.61% | ÷1.037 | ×0.800 | — | — | 2.79% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 107, 1B 101, 2B 111, 3B 80, K 100, BB 98 — applied at half strength. Age: age 22 vs a level average of 22.0 → +0.0% on BB/HBP/hit rates (0.0 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.950.
Result: wOBA .349 → .297; ISO .135 → .110; BABIP .306 → .259. 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+Charlotte Stone Crabs · 103 PAwOBA .303 → .262 (−41)K% 13.6% → 19.6%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 13.59% | ÷0.983 | ×1.420 | — | — | 19.63% |
| BB% (unintentional) /PA | 6.80% | ÷1.022 | ×0.750 | — | ×1.012 | 5.05% |
| HBP% /PA | 3.88% | — | ×0.930 | — | ×1.012 | 3.65% |
| Singles /BIP | 22.97% | ÷1.031 | ×0.920 | ×0.983 | ×1.012 | 20.40% |
| Doubles /BIP | 2.70% | ÷1.012 | ×0.960 | ×0.983 | ×1.012 | 2.55% |
| Triples /BIP | 2.70% | ÷1.150 | ×0.810 | ×0.983 | ×1.012 | 1.89% |
| Home runs /BIP | 1.35% | ÷0.857 | ×0.880 | — | ×1.012 | 1.40% |
Factors used: league row FSL. Park (home-season share, regressed): HR 71, 1B 106, 2B 102, 3B 130, K 97, BB 104 — applied at half strength. Age: age 22 vs a level average of 22.8 → +1.2% on BB/HBP/hit rates (0.8 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.983.
Result: wOBA .303 → .262; ISO .102 → .088; BABIP .276 → .242. 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).
2016 ABowling Green Hot Rods · 478 PAwOBA .282 → .240 (−41)K% 19.9% → 26.5%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 19.87% | ÷1.018 | ×1.360 | — | — | 26.54% |
| BB% (unintentional) /PA | 5.44% | ÷0.999 | ×0.690 | — | ×1.030 | 3.87% |
| HBP% /PA | 1.26% | — | ×0.780 | — | ×1.030 | 1.01% |
| Singles /BIP | 24.33% | ÷1.007 | ×0.920 | ×0.977 | ×1.030 | 22.36% |
| Doubles /BIP | 5.93% | ÷0.945 | ×0.830 | ×0.977 | ×1.030 | 5.24% |
| Triples /BIP | 0.89% | ÷0.956 | ×0.910 | ×0.977 | ×1.030 | 0.85% |
| Home runs /BIP | 1.19% | ÷1.028 | ×0.800 | — | ×1.030 | 0.95% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 106, 1B 101, 2B 89, 3B 91, K 104, BB 100 — applied at half strength. Age: age 20 vs a level average of 22.0 → +3.0% on BB/HBP/hit rates (2.0 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.977.
Result: wOBA .282 → .240; ISO .088 → .074; BABIP .308 → .280. 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).
2015 ROKPrinceton Rays · 287 PAwOBA .321 → .246 (−75)K% 14.6% → 20.8%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 14.63% | ÷1.000 | ×1.420 | — | — | 20.78% |
| BB% (unintentional) /PA | 4.88% | ÷1.000 | ×0.640 | — | ×1.008 | 3.15% |
| HBP% /PA | 3.48% | — | ×0.740 | — | ×1.008 | 2.60% |
| Singles /BIP | 22.90% | ÷1.000 | ×0.840 | ×0.967 | ×1.008 | 18.74% |
| Doubles /BIP | 4.67% | ÷1.000 | ×0.740 | ×0.967 | ×1.008 | 3.37% |
| Triples /BIP | 0.93% | ÷1.000 | ×0.740 | ×0.967 | ×1.008 | 0.67% |
| Home runs /BIP | 3.74% | ÷1.000 | ×0.800 | — | ×1.008 | 3.01% |
Factors used: level-wide ROK factors (no league-specific row for this league/era). Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 19 vs a level average of 19.5 → +0.8% on BB/HBP/hit rates (0.5 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.967.
Result: wOBA .321 → .246; ISO .148 → .113; BABIP .293 → .233. 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).
2014 ROKGCL Rays · 116 PAwOBA .295 → .231 (−64)K% 15.5% → 22.3%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 15.52% | ÷1.000 | ×1.440 | — | — | 22.34% |
| BB% (unintentional) /PA | 6.03% | ÷1.000 | ×0.620 | — | ×1.022 | 3.83% |
| HBP% /PA | 2.59% | — | ×0.720 | — | ×1.022 | 1.90% |
| Singles /BIP | 22.62% | ÷1.000 | ×0.820 | ×1.023 | ×1.022 | 19.40% |
| Doubles /BIP | 5.95% | ÷1.000 | ×0.720 | ×1.023 | ×1.022 | 4.48% |
| Triples /BIP | 2.38% | ÷1.000 | ×0.720 | ×1.023 | ×1.022 | 1.79% |
| Home runs /BIP | 0.00% | ÷1.000 | ×0.780 | — | ×1.022 | 0.00% |
Factors used: level-wide ROK factors (no league-specific row for this league/era). Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 18 vs a level average of 19.5 → +2.2% on BB/HBP/hit rates (1.5 yr younger than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×1.023.
Result: wOBA .295 → .231; ISO .088 → .066; BABIP .299 → .248. 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 — .