Ошибка dplyr с mutate () при попытке изменить значение переменной на основе условия if_else - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь изменить значение переменной, используя dplyr::mutate(). Я хочу изменить значение столбца «уверенность» с «неуверенный» на «вероятный», если идентификатор из символьного вектора находится в столбце идентификатора в наборе данных. Если он не совпадает, я хотел бы сохранить первоначальное значение. Вот пример моей текущей попытки:

library(dplyr)
library(magrittr)

data <- data.frame(
  ID = c("a100", "b100", "c100", "d100", "e100", "f100"),
  certainty = c("confirmed", "likely", "unsure", "likely", "unsure", "confirmed")
)

data %<>% as_tibble()

id_list <- c("c100", "e100")

data %<>%
  mutate(certainty = if_else(id_list %in% ID, "likely", certainty))

Вывод должен выглядеть следующим образом:

 ID    certainty
  <fct> <fct>    
1 a100  confirmed
2 b100  likely   
3 c100  likely   
4 d100  likely   
5 e100  likely   
6 f100  confirmed

В настоящее время я получаю эту ошибку:

Error: `false` must be length 2 (length of `condition`) or one, not 6

Как я должен решить это?

1 Ответ

2 голосов
/ 07 марта 2020

Проблема с порядком аргументов в %in%. Возвращает длину id_list, которая равна 2, если мы используем id_list %in% ID. Вместо этого он должен быть другим, то есть ID %in% id_list e..g

1:3 %in% 1:2
#[1]  TRUE  TRUE FALSE

и

1:2 %in% 1:3
#[1] TRUE TRUE

Здесь это будет

library(dplyr)
data %>% 
      mutate(certainty = ifelse(ID %in% id_list, "likely", as.character(certainty)))

# A tibble: 6 x 2
#  ID    certainty
#  <fct> <chr>    
#1 a100  confirmed
#2 b100  likely   
#3 c100  likely   
#4 d100  likely   
#5 e100  likely   
#6 f100  confirmed

ПРИМЕЧАНИЕ: certainty равно factor, поэтому его необходимо преобразовать в character или добавить likely в качестве другого уровня (если мы хотим придерживаться factor класса)


Это может быть также оставайтесь как factor

library(forcats)
data %>%
     mutate(certainty = fct_collapse(certainty,
              likely = as.character(certainty)[ID %in% id_list]))\
# A tibble: 6 x 2
#  ID    certainty
#  <fct> <fct>    
#1 a100  confirmed
#2 b100  likely   
#3 c100  likely   
#4 d100  likely   
#5 e100  likely   
#6 f100  confirmed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...