结合 M/D/Y 和 NBA 比赛时钟数据的累积时间变量

Cumulative Time Variable by Combining M/D/Y and NBA Game Clock data

我正在尝试为 NBA 投篮日志数据集创建一个累积时间变量,它将结合三种不同的时间流逝测量值。我需要使用 12-Game Clock 来确定给定 NBA 球员的投篮时间,因为 NBA 的四分之一是 12 分钟。按照同样的逻辑,在比赛计时钟为 11:00 的第二节投篮对应的累计时间为 12+(12-11)= 13 分钟。 AM/PM 不存在于游戏时钟变量中 - 它只是表示该节已经过去了多少分秒。

日期 季度 游戏时钟(分:秒)
2014 年 10 月 29 日 1 11:01
2014 年 10 月 29 日 3 2:42
2014 年 10 月 30 日 1 1:58
2014 年 11 月 1 日 2 1:15

期望的输出:

累计时间
00:00:59
00:45:58
24:10:02
72:34:45

如果您需要更多信息,请告诉我。数据集:https://www.kaggle.com/dansbecker/nba-shot-logs

提前谢谢你。

@tedscr 使用 times-only 在 R 中可能会造成混淆。包 {lubridate} 带有 3 种不同的类型,即间隔、持续时间和周期。对于以下内容,我使用 {hms} 包来帮助格式化和解析时间并将其作为一个句点使用(:= hms 独立于 [start]date)。

注意:在引擎盖下,我们使用秒。因此,您也可以将所有需要的内容强制转换为数字秒数或 difftime 并使用它。

为了向您解释发生了什么,我为每个步骤创建了一个新列。 您可能希望根据自己的喜好将其合并到一个操作中。

library(hms)
library(lubridate)
library(dplyr)

#----------------------- data -----------------------------
nba <- tibble::tribble(
     ~Date, ~Quarter, ~`Game.Clock.(Min:Sec)`,
   "OCT 29, 2014",       1L,                 "11:01",
   "OCT 29, 2014",       3L,                  "2:42",
   "OCT 30, 2014",       1L,                  "1:58",
   "NOV 01, 2014",       2L,                  "1:15"
   )

quarter <- hms::hms(minutes = 12)    # to create a "period" of 12 minutes

nba %>% 
  mutate(
#---- determine the time played in the current quarter
#---- as Game.Clock is a character emulating mm::ss add 00: to have hms!  
    GameClockPlayed = quarter - hms::parse_hms(paste0("00:", `Game.Clock.(Min:Sec)`) )
#---- simply add the previous quarters played to the current played time
#---- note: this returns "seconds"
   , CumGameClock = (Quarter * quarter) + GameClockPlayed
#---- use lubridate to nicely format the seconds played
   , CumGameClock2 = lubridate::seconds_to_period(CumGameClock))
)

这给你:

  Date         Quarter `Game.Clock.(Min:Sec)` GameClockPlayed CumGameClock CumGameClock2
  <chr>          <int> <chr>                  <drtn>          <drtn>       <Period>     
1 OCT 29, 2014       1 11:01                   59 secs         779 secs    12M 59S      
2 OCT 29, 2014       3 2:42                   558 secs        2718 secs    45M 18S      
3 OCT 30, 2014       1 1:58                   602 secs        1322 secs    22M 2S       
4 NOV 01, 2014       2 1:15                   645 secs        2085 secs    34M 45S      

如果您需要做进一步的数学运算并且 hms/lubirdate 句点构造太麻烦,您可以将 as.numeric() 应用于 period 对象。同样对于最终演示文稿,您可以将其强制转换回字符格式。