组合具有不同 ID 的数据集?

数据挖掘 r
2022-03-10 18:51:40

我正在学习 R 并尝试比较 MLB 球员的薪水与 WAR

一个数据集包含所有工资,另一个包含 WAR 信息,它们的变量标记不同。例如,一组中的每个团队名称都是一个缩写(ATL、NYY、HOU vs. Braves、Yankees、Astros)。有了这个例子,我确信我可以找到一种方法来制作 ATL == Braves,但对于所有玩家来说,这似乎并不那么容易。

球员在一个数据集中被标记为姓氏的前 5 个字母,名字的前两个字母,然后是两个数字来区分比赛。另一组只有名字。一个例子是 Bryce Harper vs. harpebr03。

没有明显的方法可以按字母顺序进行排序,并且匹配每个玩家的变量 ID 会花费太多时间。有没有更简单的方法可以在 R 中链接这些不同命名的变量?

1个回答

这是一些处理您关于匹配名称的问题的第二部分的代码。(顺便说一句,包括样本数据总是有帮助的)

require(dplyr)  ## for join

# create two example dataframes 
d1 <- data.frame(player_first_last=c("Joe Smith", "Jack Johnson", "A Jones", "Slow Mo"), d1_value=c(1,2,3,4))
d2 <- data.frame(player_last_first2=c("SmithJo","JohnsJa", "MoSl"), d2_value=c(11,12,13))

# first two letters of first name using substr, and trimming whitespace
d1$player_first2 <- trimws(substr(d1$player_first, 1, 2 ))

# last name - regex capturing everything after the first whitespace
# this is a "regular expressions" 
d1$player_last <- gsub(".+\\s(.+)", "\\1", d1$player_first_last)

# concatenate last 5 and first 2 using paste0
d1$player_last_first2 <- paste0(substr(d1$player_last,1,5), d1$player_first2)

# join on constructed name -- full_join in case there are differences
d3 <- full_join(d1, d2, by="player_last_first2")

结果在 d3

  player_first_last d1_value player_first2 player_last player_last_first2 d2_value

1         Joe Smith        1            Jo       Smith            SmithJo        1
2      Jack Johnson        2            Ja     Johnson            JohnsJa        2
3           A Jones        3             A       Jones             JonesA       NA
4           Slow Mo        4            Sl          Mo               MoSl        3