【问题标题】:Replacement of nested ifelse using purrr & modify_if使用 purrr 和 modify_if 替换嵌套的 ifelse
【发布时间】:2020-08-24 22:24:22
【问题描述】:

这是我想要实现的目标,出于某种原因认为使用 purrr 和“modify_if”会更有效?在应用中,它会快速增长,因此速度/效率很重要。这看起来很简单,但我需要做的是,每个 ifelse 级别都需要几个命令。

vec1 <- c(1,2,3)
vec1 <- sapply(
  vec1,function(x) ifelse(x == 1,2,
                          ifelse (x == 2,3,
                                  ifelse (x == 3,1,0))))
vec1 #output
[1] 2 3 1

另外,如果没有其他条件,即如果不满足谓词,我只想什么都不做,我该如何编码ifelse?只需使用if 语句而不是ifelse

谢谢,J

【问题讨论】:

    标签: r loops nested purrr


    【解决方案1】:

    这里不需要sapplyifelse是矢量化的,可以直接使用。

    您也可以使用dplyr::recode

    dplyr::recode(vec1, `1` = 2, `2` = 3, `3` = 1)
    #[1] 2 3 1
    

    case_when,这是嵌套ifelse 语句的替代方案。

    dplyr::case_when(vec1 == 1 ~2, vec1 == 2 ~3,  vec1 == 3 ~1)
    

    【讨论】:

      【解决方案2】:

      我们也可以在base R 中使用命名向量而不使用任何包或 ifelse

      unname(setNames(1:3, c(2, 3, 1))[as.character(vec1)])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        相关资源
        最近更新 更多