Замена одного конкретного фактора на основе другого фактора - PullRequest
1 голос
/ 17 мая 2019

R версия 3.5.3 (2019-03-11)

Привет всем, поэтому я работал с некоторыми данными по бейсболу, и я изо всех сил пытался заменить один фактор на другой ... Предположим, яесть:

Names <- c("name1", "name2", "name3", "name4", "name5")
batHand <- c("L", "S", "L","S", "R")
stats <- c(1, 2, 0, 1, 1)
pitchHand <- c("R", "L", "R", "R", "L")
baseballdf <- data.frame(Names, batHand, Stats, pitchHand)

И я хочу переключить все S в противоположность pitchHand, поэтому это будет выглядеть так:

Names <- c("name1", "name2", "name3", "name4", "name5")
batHand <- c("L", "R", "L","L", "R")
stats <- c(1, 2, 0, 1, 1)
pitchHand <- c("R", "L", "R", "R", "L")
baseballdf2 <- data.frame(Names, batHand, Stats, pitchHand)

(Реальный фрейм данных - 40 000+ строктак что простое их переключение вручную не сработает)

Я в основном использовал dplyr и пробовал многочисленные варианты mutate, replace, case_when и if_else, но не могу понять это.Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

Вот способ с вложенным ifelse:

baseballdf %>% 
  mutate(batHand = ifelse(batHand != "S", batHand, ifelse(pitchHand == "R", "L", "R")))

case_when может быть более читабельным, но нам нужно сначала изменить столбец на character:

baseballdf %>%
  mutate(
    batHand = as.character(batHand),
    batHand = case_when(
      batHand != "S" ~ batHand,
      pitchHand == "R" ~ "L",
      pitchHand == "L" ~ "R"
  ))
...