我有一个包含0,1和2的数据帧。我的目标是切换这些值,以便0显示为FALSE,1或2显示为TRUE。
我试了试deplyr`s的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结构。
发布于 2019-01-15 19:42:02
您可以使用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发布于 2019-01-15 19:20:51
这在base R中非常简单:
test[,-1] <- lapply(test[,-1], as.logical)默认情况下,0对应于FALSE,所有其他值都对应于TRUE,因此as.logical会为您执行此操作。也许用dplyr也很容易做到这一点,在`case_when´中你绝对不需要那么多行。
发布于 2019-01-15 19:24:55
在基本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
)
)
)https://stackoverflow.com/questions/54197782
复制相似问题