Изменение значения числовых элементов столбца - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь изменить значение числовых элементов столбца, не создавая вспомогательный столбец для преобразования в числовое значение

Примерно так: выдает ошибку

Ошибка в mutate_impl (.data, точки): Ошибка оценки: false должен иметь тип double, а не символ.

foo = c(1, 2, 3) 
bar = c(1, "AB", 3)
df = data.frame(foo,bar,stringsAsFactors=FALSE)

df%>%
  mutate(bar=if_else(!is.na(as.numeric(bar)),as.numeric(bar)/100,bar))

1 Ответ

0 голосов
/ 01 июня 2018

if_else чувствительно к типу.У нас может быть только один class.Таким образом, параметры true и false должны быть одинаковыми class.В коде ОП один numeric, а другой character.

df %>% 
   mutate(bar = if_else(!is.na(as.numeric(bar)), 
           as.character(as.numeric(bar)/100), bar))

Примечание. Обычный ifelse (base R) по-прежнему будет работать без изменения типа


Другой вариант - отфильтровать элементы, имеющие только числовые значения ипреобразовать его в numeric и выполнить деление

i1 <- grep("^[0-9.]+$", df$bar) # or the is.na(as.numeric route
df$bar[i1] <- as.numeric(df$bar[i1])/100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...