我正在使用R中的Retrosheet棒球数据,并试图创建一个单独的列(使用dplyr中的mutate函数),提醒我现有列中的单个字符串是否以“两击”或“三球”。例如:替代嵌套,如果其他语句
PITCH_SEQ_TX <- c('SSSC', 'FFBB', 'BBSSC', 'BBBSB', 'CBSFFFS')
Retrosheet开发商只列出一个字符为球( “B”),但是几个用于打击(即, “C”, “F”, “升”, “M”, “S”, “T”)。因此,如果我想从上面的线,序列始于二罢工或三个球收集我会用:
PITCH_SEQ_TX_Updated <- mutate(PITCH_SEQ_TX, Cutoff = ifelse(grepl("^BBB", PITCH_SEQ_TX),
"Three Balls", ifelse(grepl("^SS", updated_PITCH_SEQ_TX), "Two Strikes",
ifelse(grepl("^FF", PITCH_SEQ_TX), "Two Strikes", "NA"))))
无论其有两个罢工计数(太多不同的组合即CC,CS,FF等),这阻止了我在整个数据集上使用嵌套的if else语句(当通过50个不同的组合时,我得到一个错误:在第17行的上下文栈溢出警告)。是否有一个替代函数可以让我压缩现有代码,无论是使用ifelse还是其他一些函数来解决这个问题?任何帮助,将不胜感激。
'?switch'可以帮助 –
或'case_when',如果你想用'mutate'来做。 – mt1022