背景
下面是我的gamedatadput 形式的数据集——它包含一些 MLB 比赛的比分。
structure(list(team = c("NYM", "NYM", "BOS", "NYM", "BOS"), linescore = c("010000000",
"(10)1140006x", "002200010", "00000(11)01x", "311200"), ondate = structure(c(18475,
18476, 18487, 18489, 18494), class = "Date")), class = "data.frame", row.names = c(NA,
-5L))
例如,这是一行分数:“002200010”。
有些线分数以“x”结尾,有些线分数在括号中包含两位数,如“00000(11)01x”。括号内的每个数字表示该队在该局中得了多少分。如果一支球队在一局中得分超过 9 分,则该数字放在括号中,因此在得分线“00000(11)01x”中,球队在第六局中得分 11 分,并且在下半局没有击球。第九个(用“x”表示)。
并非每条线得分都有九局。有些有更多,有些只有六个。
我需要做什么
First,我需要做的是获取一支球队在每局中得分多少分,例如第一,第二,第三等,并将每个得分在新专栏中。我更喜欢使用 dplyr 的解决方案。
我已经查看了 stackoverflow 的建议解决方案,但没有发现符合我需要的解决方案。如果有的话,如果您能分享它的 URL,我将不胜感激。
我尝试使用以下代码来做到这一点:
gamedata %>%
select(ondate, team, linescore) %>%
mutate(inng1 = str_extract(linescore, "\\d|\\(\\d{2}\\)"))
这是输出:
ondate team linescore inng1
2020-08-01 NYM 010000000 0
2020-08-02 NYM (10)1140006x (10)
2020-08-13 BOS 002200010 0
2020-08-15 NYM 00000(11)01x 0
2020-08-20 BOS 311200 3
Second,我怎样才能删除其中的括号inng1“10”列?
下面的代码产生了下面的错误:
gamedata %>%
select(ondate, team, linescore) %>%
mutate(inng1 = str_extract(linescore, "\\d|\\(\\d{2}\\)"))
str_remove_all(inng1,"[()]")
这是我收到的错误消息:
“stri_replace_all_regex(字符串、模式、fix_replacement(替换)中出现错误:找不到对象‘inng1’”
Third,我需要知道如何提取每个附加局的得分,从第二局开始,将每个值放入其自己的列中,例如 inng2、inng3 等。
最后,我应该得到上面显示的输出(每个两位数局没有括号),每个局有一列,所以会有一个标题为“inng1”、“inng2”、“inng3”、“inng4”的列,局列中的数据需要是数字,稍后我将对它们进行求和。