#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:
То, что я пытаюсь сделать, это разделить 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, .)