首页 > 解决方案 > 将 df 中的值更改为 0 = FALSE、1 = TRUE、2 = TRUE

问题描述

我有一个包含 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 结构。

标签: rdplyr

解决方案


在基地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
      )
    )
  )

推荐阅读