【问题标题】:Replacing one specific factor based on another factor根据另一个因素替换一个特定因素
【发布时间】:2019-05-17 01:31:17
【问题描述】:

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 变体,但无法完全弄清楚。 任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: r dataframe dplyr factors


    【解决方案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"
      ))
    

    【讨论】:

    • 两者都有效!谢谢@Gregor!我在某一点或另一个点上对他们两个都在正确的轨道上,但弄乱了语法
    猜你喜欢
    • 2012-11-15
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多