CHICAGO -- Chicago White Sox third baseman Todd Frazier arrived to the clubhouse early Sunday to analyze video of some of his recent at-bats.
"I was swinging at a lot of pitches, and I was saying, 'Slow it down a little bit, get my footwork ready,'" Frazier said. "We're all professionals, and you've got to act like it and be like it. If you've got to do a little extra homework, you've got to do it."
The study session paid off several hours later. Frazier went 2-for-3 with a solo home run, and Chicago held on for a 3-2 win over the Kansas City Royals on Sunday afternoon.
Melky Cabrera finished 2-for-4 with a double and two RBIs as the White Sox erased an early deficit. Cabrera's two-out single in the fifth inning scored a pair of runs and held up as the game-winning hit.
Chicago (26-18) averted a three-game series sweep and won for the third time in the past 11 contests.
"It was a big one when (Frazier) got us on the board, but the one with Melky, we've been scuffling with guys on base, especially with two outs," White Sox manager Robin Ventura said. "Offensively, you need to have that hit that kind of breaks it open and pops the balloon."
White Sox left-hander Carlos Rodon (2-4) earned his first victory since April 13. The 23-year-old southpaw allowed two runs on eight hits in 6 2/3 innings. He walked two and struck out four.
Rodon said his teammates made several key defensive plays that prevented big innings. Right fielder Adam Eaton made a sliding catch along the right-field line for the first out of the game. In the seventh inning, first baseman Jerry Sands leaped to snare a line drive that could have gone for extra bases.
"We've got a great group," Rodon said. "I'm just letting the defense play."
Four White Sox pitchers preserved the lead out of the bullpen. Right-hander David Robertson pitched a scoreless ninth inning to record his 11th save.
Paulo Orlando went 2-for-4 with a double and an RBI to lead the Royals at the plate. Kansas City (22-21) dropped to 9-14 on the road.
Royals right-hander Yordano Ventura (4-3) gave up three runs on six hits in six innings. He walked four and struck out three. Ventura leads the majors with 33 walks this season.
Royals manager Ned Yost said he was pleased to take two out of three games in the series.
"You put yourself in a position to sweep them, but Rodon did a nice job today," Yost said. "I don't think we had a lot of missed opportunities that I'm lamenting right now. I thought it was a good game."
Kansas City opened the scoring in the second inning on Orlando's single to center field. The hit scored Eric Hosmer, who led off the inning with a line-drive single up the middle.
Chicago evened the score at 1-1 on an opposite-field home run by Frazier to lead off the fourth inning. Frazier connected with Ventura's 98 mph fastball on the outside corner, and the ball carried over the right-field fence for Frazier's 13th home run of the season.
Kansas City trimmed the deficit to 3-2 in the sixth inning on a sacrifice fly by Omar Infante.
The game was delayed for a few minutes in the seventh inning after Royals left fielder Alex Gordon collided with third baseman Mike Moustakas while chasing a pop fly in foul territory. Both players remained in the game after being evaluated by the team trainer, but Gordon left one inning later.
After the game, the Royals announced that Gordon sprained his right wrist. His status is day-to-day.
NOTES: White Sox 1B Jose Abreu was held out of the starting lineup after managing only two extra-base hits in his previous 11 games. Abreu hit at least .290 in each of his first two seasons, but he is hitting .243 this season. "Just hit the reset button and let him watch and cheer guys on," manager Robin Ventura said. ... Royals DH Kendrys Morales didn't start for the first time this season but struck out in the ninth as a pinch hitter. Morales is hitting .190 with five home runs and 17 RBIs in 42 games. ... White Sox SS Carlos Sanchez earned his third start of the season. Sanchez started 112 games in 2015 but returned to a reserve role after the White Sox added 2B Brett Lawrie and SS Jimmy Rollins. ... Royals C Drew Butera made his third start in the past 25 games.