繁体   English   中英

在 R 中,如何将值添加到一个值与另一个数据框的值匹配的行的末尾?

[英]In R, how can I add values onto the end of rows where one value matches that of another data frame?

我目前有两个正在使用的数据框。 第一个是 MLB 棒球比赛的数据集,包含比赛日期和球员 ID。

游戏日志

日期 击球手 1 ID 击球手 2 ID
5月1日 凯文
5月1日 约翰 塞缪尔
5月2日 凯文
5月2日 约翰 塞缪尔

第二个数据集包含本赛季的球员统计数据。 此数据集是从 web 中提取的,因此可以更新以包含每个玩家的所有统计数据,直到列出的游戏日期。 例如,您可以在下面看到两个不同日期的数据框。

5月1日

击球手编号 点击数 本垒打 击球率
15 4个 .244
约翰 18 6个 .261
凯文 29 16 .347
塞缪尔 7 1个 .161

5月2日

击球手编号 点击数 本垒打 击球率
16 4个 .247
约翰 19 6个 .265
凯文 30 17 .343
塞缪尔 9 2个 .180

我想做的是遍历游戏列表,在日期和击球手 ID 匹配的地方,将第二个数据框中的统计数据添加到正确行的末尾。 令我困扰的部分是,对于第一个数据框中的每一行,都有多个 Batter ID 需要匹配。

我最初的想法是使用嵌套循环来执行此操作,但我无法找到一个解决方案,让我按顺序遍历每一行,以便我可以限制我抓取数据的次数。

这是我最初思考过程的开始。

for (i in rows) {
      if (i %in% BatterID){
        ...
  }
}

有什么想法吗? 谢谢。

您需要将 stats 数据框组合成一个带有Date列的数据框,然后这是一个简单的连接。

是这样的:

# put all the stats data frames in a list
stats = list(May_1 = May_1, May_2 = May_2)
# (in your real case you probably want to use `stats = mget(ls(pattern = ...))`
# where `pattern` is a regex pattern to identify these data frames

# combine them and get rid of the underscores
library(dplyr)
library(stringr)
stats_df = bind_rows(stats, .id = "Date") %>%
  mutate(Date = str_replace(Date, pattern = "_", replacement = " "))

# and join
Game_Logs %>%
  left_join(
    stats_df,
    by = c("Date", "Batter 1 ID" = "Batter ID")
  ) %>%
  left_join(
    stats_df,
    by = c("Date", "Batter 2 ID" = "Batter ID",
    suffix = c(".1", ".2")
  )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM