Измените значения в df на 0 = ЛОЖЬ, 1 = ИСТИНА, 2 = ИСТИНА - PullRequest
0 голосов
/ 15 января 2019

У меня есть датафрейм, содержащий 0, 1 и 2s. Моя цель состоит в том, чтобы переключить эти значения, поэтому вместо этого он показывает FALSE для 0 и TRUE для 1 или 2.

Я попробовал case of deplyr_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.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

В базе 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
      )
    )
  )
0 голосов
/ 15 января 2019

Вы можете использовать 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
0 голосов
/ 15 января 2019

Это довольно просто в базе R:

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

По умолчанию 0 соответствует FALSE, а все остальные значения TRUE, поэтому as.logical сделает это за вас. Возможно, это легко сделать и с помощью dplyr, вам точно не нужно столько строк в case_when.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...