Wanted: Third Baseman

Rylan Bannon by the Numbers

With a hole at the hot corner that has heated up with Ronnie Mauricio’s leg injury, a probable product of his playing spring, summer, fall, and winter ball, the Mets have invited a former high school second baseman who was the Big East Player of the Year in 2017, Rylan Bannon, to spring training.

After homering 15 times in his last season playing for the Xavier University Musketeers’ baseball team, he dipped into the double digits in homers in every season since, including 18 for the Sugar Land Space Cowboys, the PCL team with the lowest won-loss percentage in 2023, a fact Bannon’s resume is unlikely to mention.

His home run total, however, was the third most on the team in a league where it is common for batters to touch all four bases on a hit, 68 hitters doing that at least 10 times last season — 12 played third base.

Bannon didn’t just draw attention with his bat; he also showed skill on the basepath, stealing 12 bases, tying him for the league lead among third basemen.

In the field, in 479.2 innings at third, he made just five errors while notching 85 assists.

Bannon’s presence in spring training should increase the competition at a position where the Mets again do not have a proven “name” vying for the everyday job at third.

After Two Games, the Mets Look Good

After two games, it’s obvious that this Mets team is different. In Buck Showalter, they have a manager who is both a leader and a good field general.

In Yardbarker’s 2021 ranking of Major League Baseball managers, then Mets manager Luis Rojas was 28th. In their 2022 ranking, Buck Showalter is 14th, much better than Rojas’s, but to me a mistake. Unfortunately, neither article starts with the criteria its author used to evaluate the managers. Therefore, a better way to judge a manager is by the number of games his team’s won. Using that criteria, Showalter ranks 24th among all managers from 1876 to 2020 with 1,551 wins.

Among those who have benefitted from Showalter’s leadership are the team’s hitters, who are showing more plate discipline, a noticeable problem in previous seasons.

One batter, in particular, Mark Canha, has impressed me with skills he brought to the Mets. He’s not going to win any awards for hard-hitting, but he can get on base. This season in nine plate appearances, he has gotten on base seven times (four hits and three walks), giving him an OBP of .778 and a wOBA of .636. Sure, that is based on just two games, but it shows what Canha is capable of doing.

Here are some of his Baseball Savant stats: his BB% is great (91st percentile), as are his Chase Rate (87th percentile), and his Whiff% (84th percentile.)

One potential problem is that two players are not good base runners: Pete Alonso and Robinson Cano. In 2021, Pete Alonso’s BsR (FanGraphs) of -5.1 was the lowest on the Mets with Cano’s 2020 BsR of -1.5 slightly better than Alonso’s of -2.0. (The BsR stat estimates a player’s base running skill.) Whenever they get on base in a later inning in a close game, Showalter needs to seriously consider either replacing them with a pinch runner or, if they are approaching third base with the possibility of a close play at the plate, hold them at third. That wasn’t done last night with Cano, who was thrown out trying to score, plus it didn’t help that his slide didn’t take him near the plate.

On the pitching side, both Megill and Scherzer pitched well as have the Mets relievers. In seven innings of relief, the seven pitchers gave up five hits and only one earned run, that run and three of the hits given up by the same pitcher, Seth Lugo, in the first game. Lugo was also the only reliever to appear in both games.

On a separate note, MLB must address the hit-by-pitch problem before a player gets seriously injured. In each of their first two games, a Mets player was hit in the head by a pitch. That’s unacceptable. In the second game, Nationals pitcher Steve Cishek threw a high and inside pitch to Francisco Lindor, who was set to bunt, in the head. Showalter rushed toward the field, the others in the dugout following his lead.

In the second game, an announcer blamed it on the ball, claiming pitchers cannot get a good-enough grip on it. I’ve seen tortoises move faster than the speed at which baseball is moving toward solving this problem. But then, Major League Baseball did not show any urgency in ending the lockout until the threat of the loss of games became acute.

And with regard to the hit batters in the two Mets games, after the second game, in reply to

“In a situation like this, where you had three batters for them hit last night, then you have this tonight, is there any consideration to issue any warnings before tomorrow’s game?”

the umpires’ crew chief, Mark Carlson, responded with

“That’s something the Commissioner’s Office will let us know. But going forward, we’re always aware of the situations. Obviously, we’ve been working these games, and we’re always aware of it. But as far as … that’ll be a decision the Commissioner’s Office has to make,”

shifting responsibility to the Commissioner’s Office.

Hopefully, Commissioner Manfred handles the “grip” problem better than the lockout.

On a more positive note, in a Forbes magazine article, Christian Red wrote:

“[Ron] Darling, as well as former slugger Luis Gonzalez — who played under Showalter for two seasons with the Arizona Diamondbacks — both think the Mets now have a field general who can take them deep into October, if not to the mountaintop.”

The Mets are now two games closer to that goal.

Mets Opening Day Facts

  1. Only once was the #Mets opening-day starter under 21. In 1985, in his second season with the Mets, Dwight Gooden left the game in the 7th inning. The Mets won the game, 6-5, in the bottom of the 10th, on a Gary Carter home run off ex-Mets pitcher Neil Allen.
  2. Whereas Dwight Gooden was the Mets youngest opening-day starter, Bartolo Colon and Tom Glavine were the oldest. Both were in their forties, Colon appearing once (2015) and Glavine twice (2006, 2007). In every game, they pitched six innings, gave up one earned run, and won the game. In Colon’s start, the losing pitcher was Max Scherzer.
  3. The Mets have played 60 opening games, winning 29. Jacob deGrom has been named the starter in the 2022 opener, his fourth consecutive opening-day start. In his previous three, he won two, the no-decision start in 2021. In all three games, in 17 IP, he did not give up a run.
  4. In the Mets 60-year history, on Opening Day the opposing starter has been left-handed 15 times. The last time, last year, the Mets lost 5-3. Before that, they had not lost on Opening Day against a left-handed starter since 1974. On April 7, the Nats expected starter is Patrick Corbin, a LHP.
  5. On Opening Day from 1962-2021, the Mets have played 14 teams. They have played the Phillies the most, nine times, winning six and losing three, and have never lost a home opener to the Phillies, winning all five games.
  6. The last time the Mets stole a base on Opening Day was in 2018. In the bottom of the fifth, Jay Bruce stole second base. The Mets won the game, 9-4, against the Cardinals. Travis Jankowski stole second in a season opener in 2020 with the Reds. View Stathead Results.
  7. Two Mets pitchers started almost one-third of the team’s Opening-Day games. Tom Seaver started in 11 of them, winning eight, and Dwight Gooden started in eight, winning seven. @baseball_ref
  8. Baseball Reference contains the Opening-Day lineups for all Mets opening games.

Updated April 5, 2022

Unpuzzling R: Consecutive Years

When doing a statistical analysis involving baseball, I needed to find out for how many consecutive years a player has played for a team. In this article, I reveal one way of doing that using R. One of the R programming language’s amazing capabilities is how much you can accomplish with just a small amount of code1.

In the diagram below, data is shown for three players. The stint (number of years) shown in the year column is consecutive for only Player 3. Player 1 did not play in the season after his second year, and Player 2 skipped a season after his third year.

Input

Below is how the output looks. Player 1 skipped a year after his 1963 season, which is why in the yrDiff column there is a 2. Player 2 played continuously from his first thru third years, so a “1” is in the yrDiff column for each of those years, but did not play in 1969, thus there is a two-year gap between 1968 and 1970. Player 3 played continuously during his two years with the team.

Output

player_data %>% 
  mutate(yrDiff=ifelse (is.na( year - lag(year)),1, year - lag( year )))

In this code, dplyr is used. The mutate function will create a new variable named yrdiff. To create the value for yrdiff, it seeks both the first value in year (1962) and the previous year’s value — seeking that using lag; however, as 1962 is the first data item in the column, nothing precedes it so nothing can be subtracted from 1962. Therefore, the is.na check, which asks, “Is a previous year Not Available?”, returns TRUE. When the is.na result is true, yrDiff displays 1; whereas, when it is false, which means lag(year) found a number, yrDiff displays the year – lag(year) result.

To represent the input in R, you need the code below.

Input Code

player_data <- data.frame(player = c(1,1,1,2,2,2,2,3,3), year = c(1962,1963,1965,1966,1967,1968,1970,1971,1972))

Let’s look at a real-world example. I recently investigated several baseball-related questions that shows the power of R. I obtained the data from stathead.com, formatted it in Apple Numbers, and then imported it into RStudio. The dataset contained 657 observations.

Among the results I obtained was how many games each pitcher started. This R code accomplished that:

allStarters |>
  group_by(Player) |>
  summarize(SumSt = sum(GS)) |>
  arrange(desc(SumSt))

Tom Seaver started 395 games, followed by Jerry Koosman with 346 starts and Dwight Gooden with 303. No other Mets’ pitcher had 300-plus starts.

To learn how many starts each pitcher had, I grouped each one’s data.

allStarters |>
   group_by(Player)

Two hundred ninety two pitchers were grouped by season with the years they started games arranged in ascending order. The diagram below contains a sample of part of one output display.

Next, I included the previously discussed mutate code to determine for each pitcher which years were consecutive.

allStarters |>
   arrange(Player, Year) |>
   group_by((Player)) |>
   mutate(yrDiff=ifelse(is.na(Year - lag(Year)),1,Year - lag(Year))) |>
   relocate(yrDiff, .after = Year)

Here is a sample of that code’s output:

In the first yrDiff column for Al Jackson, the “1” means that he started games in 1965 and that 1965 was either the first season he started for the Mets or that he also started games in 1964; whereas, the “3” in the yrDiff column for 1968 means that it had been three seasons since he last started a Mets game.

R is a great tool for those interested in doing the statistical analysis of baseball data. To use R effectively, there is a lot to learn; however, I have found the payoff to be well worth the effort expended to get it.


1 It is assumed that you have had some interaction with R or another programming language.