Замена одного конкретного фактора на другой фактор

R версия 3.5.3 (11.03.2019)

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

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, но не могу понять этого. Любая помощь будет принята с благодарностью. Спасибо!


person dyoung7293    schedule 17.05.2019    source источник


Ответы (1)


Вот способ вложенного 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"
  ))
person Gregor Thomas    schedule 17.05.2019
comment
Оба работали! Спасибо @Gregor! Я был на правильном пути для них обоих в тот или иной момент, но испортил синтаксис - person dyoung7293; 17.05.2019