【问题标题】:Change values in df to 0 = FALSE, 1 = TRUE, 2 = TRUE将 df 中的值更改为 0 = FALSE、1 = TRUE、2 = TRUE
【发布时间】:2019-01-15 11:17:17
【问题描述】:

我有一个包含 0、1 和 2 的数据框。 我的目标是切换这些值,因此它显示为 0 的 FALSE 和 1 或 2 的 TRUE。

我尝试了 deplyr 的 case_when,但它没有提供预期的结果。

test <- data.frame("ID" = c("A", "B", "C", "D"),
                "Primary" = c(0,0,2,1),
               "Secondary" = c(1,0,1,2),
               "Tertiary" = c(2,1,0,0))

test <- case_when(
 test$Primary == 0 ~ "FALSE",
 test$Primary != 0 ~ "TRUE",
 test$Secondary == 0 ~ "FALSE",
 test$Secondary != 0 ~ "TRUE",
 test$Secretory == 0 ~ "FALSE",
 test$Secretory != 0 ~ "TRUE",
 test$Tertiary == 0 ~ "FALSE",
 test$Tertiary != 0 ~ "TRUE")

上面的代码给了我一个字符向量,所有结果都在一行中,但我希望保持 df 结构。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用mutate_if 将数字列更改为其逻辑等效项:

    test %>% mutate_if(is.numeric,as.logical)
      ID Primary Secondary Tertiary
    1  A   FALSE      TRUE     TRUE
    2  B   FALSE     FALSE     TRUE
    3  C    TRUE      TRUE    FALSE
    4  D    TRUE      TRUE    FALSE
    

    【讨论】:

    • 作为 dplyr 的粉丝,这是我渴望的答案。非常感谢您的快速回复!
    【解决方案2】:

    这在基础 R 中很容易:

    test[,-1] <- lapply(test[,-1], as.logical)
    

    默认情况下,0 对应于 FALSE,所有其他值对应于 TRUE,因此 as.logical 会为您执行此操作。可能使用 dplyr 也很容易做到这一点,您绝对不需要在 `case_when´ 中使用那么多行。

    【讨论】:

      【解决方案3】:

      在基地R 中可以这样做:

      test[-1] <- test[-1] > 0
      test
      #   ID Primary Secondary Tertiary
      # 1  A   FALSE      TRUE     TRUE
      # 2  B   FALSE     FALSE     TRUE
      # 3  C    TRUE      TRUE    FALSE
      # 4  D    TRUE      TRUE    FALSE
      

      如果你坚持dplyr + case_when 你可以这样做:

      test[-1] <- 
        test %>%
        select(-"ID") %>%
        mutate_all(
          funs(
            case_when(
              . == 0 ~ FALSE,
              . %in% 1:2 ~ TRUE
            )
          )
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-10
        • 2023-01-03
        • 1970-01-01
        • 2021-11-08
        • 2012-08-27
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多