Проблемы с stringr, работающие с данными бейсбольной подачи в R

#r #stringr

#r #stringr

Вопрос:

Я работаю с данными бейсбола в R и пытаюсь присвоить вес (avg_re) определенным ситуациям, а именно, сколько аутов и сколько бегунов на базе. У меня есть два набора данных: re_table и Season_RE.

в таблице re_table есть два столбца: ситуация (base_out_state) и вес (avg_re). Первая строка в основном говорит нам, что когда есть кто-то на 1b, 2b и 3b с 0 аутами, ожидается, что будет забито 2,57 пробега. Season_RE берет столбец ситуации и делит его на четыре новых столбца (outs, 1b, 2b и 3b).

Вот как выглядит таблица re_table: введите описание изображения здесь

Вот как выглядит Season_RE: введите описание изображения здесь

То, что я пытаюсь сделать, это разделить base_out_state из re_table на четыре новые категории. Я успешно сделал это для аутов, но я не знаю, как это сделать для 1b, 2b или 3b. Код, который я нашел в Интернете, использовал это для этого, но, как вы можете видеть, он ничего не сделал для меня.

 library(stringr)
for (i in 1:nrow(re_table)){
  
  Season_RE$outs_when_up[i] = str_split(
    re_table$base_out_state, " ")[[i]][[1]]
  
  Season_RE$on_1b[i] = ifelse(str_split(
    re_table$base_out_state, "")[[i]][[5]] == "1b", 1, 0)

  Season_RE$on_2b[i] = ifelse(str_split(
    re_table$base_out_state, " ")[[i]][[6]] == "2b", 1, 0)
  
  Season_RE$on_3b[i] = ifelse(str_split(
    re_table$base_out_state, " ")[[i]][[7]] == "3b", 1, 0)
  
}
 

Я никогда stringr раньше не использовал и понятия не имею, что я делаю. Если вы хотите взглянуть на весь код, вот ссылка: https://github.com/ethanmoore21/PitchQuality/blob/master/qop_3_rfs.R

Ответ №1:

Вместо str_split этого мы можем использовать str_detect

 library(dplyr)
library(purrr)
library(stringr)
Season_RE2 <- map_dfc(c("1b", "2b", "3b"), ~ Season_RE %>%
       transmute(!! str_c("on_", .x) :=  (str_detect(base_out_state, .x)))) %>%
       bind_cols(Season_RE, .)