背景
以下是我的gamedata数据集以dput形式呈现——它包括一些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"。每个不在括号中的数字表示该队在回合中获得了多少分。如果一个队在一局中得分超过九分,则将数字放在括号中。因此,在行比分“00000(11)01x”中,该队在第六局得到11分,并且没有在第九局下半局上场(由'x'表示)。
并非每个行比分都有九局。有些比赛有更多比赛局数,而有些只有六局。 我需要做什么 首先,我需要获取每个局中一个团队获得的得分,例如第一局、第二局、第三局等,并将每次得分放入新的列中。我希望解决方案使用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
其次,我该如何去掉“inng1”列中数字“10”周围的括号?
下面的代码导致了下面的错误:
gamedata %>%
select(ondate, team, linescore) %>%
mutate(inng1 = str_extract(linescore, "\\d|\\(\\d{2}\\)"))
str_remove_all(inng1,"[()]")
我收到的错误信息如下:
"在stri_replace_all_regex(string,pattern,fix_replacement(replacement)中出现错误:对象'inng1'未找到"
第三步, 我需要知道如何提取每个额外局的得分,并从第二局开始,将每个值放入自己的列中,例如inng2、inng3等。
最终,我应该有上面显示的输出结果(没有括号表示每个两位数的局),每个局应该有一列,因此会有一个名为"inng1"、"inng2"、"inng3"、"inng4"等的列。局列中的数据需要是数字,因为稍后我将对它们进行求和。
x
值? - Anoushiravan R