R: та же функция с разными выходами при оценке в dplyr :: mutate () - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в R и Tidyverse. Теперь я столкнулся с проблемой:

Предположим, у нас есть персонаж "2-Jan-01":

При запуске функции получаем:

as.Date("2-Jan-01", tryFormats = c("%y-%b-%d", "%b-%y-%d"))

[1] "2002-01-01"

Однако, когда я использую команду mutate:

df %>%
mutate(birth_date=as.Date(as.character(birth),
tryFormats = c("%y-%b-%d", "%b-%y-%d")))

При преобразовании записи 2-Jan-01 вместо 2002-01-01.

я получаю NA.

Я не понимаю, почему одна и та же функция будет оценивать разные значения внутри и снаружи мутирования. Кто-нибудь может это объяснить? Заранее спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Ваш код работает нормально для меня.

librayr(dplyr)

df <- tibble(
  birth = "2-Jan-01"
)

Оставьте ваш код нетронутым:

df %>%
  mutate(birth_date = as.Date(
    as.character(birth),
    tryFormats = c("%y-%b-%d", "%b-%y-%d")
  ))

Я получаю:

  birth    birth_date
  <chr>    <date>    
1 2-Jan-01 2002-01-01

(обратите внимание, что я использовал тиббл, но он работает точно так же с традиционным фреймом данных).

Теперь нет смысла использовать as.character() в вашем коде, поскольку "birth" уже имеет символ класса. Итак, удалив его, мы имеем:

df %>%
  mutate(
    birth_date = as.Date(
      birth,
      tryFormats = c("%y-%b-%d", "%b-%y-%d")
    ))

Что дает тот же результат.

И если вы не хотите сохранять старый столбец «рождение», вы можете использовать transmute() вместо:

df %>%
  transmute(
    birth_date = as.Date(
      birth,
      tryFormats = c("%y-%b-%d", "%b-%y-%d")
    ))

Что дает:

  birth_date
  <date>    
1 2002-01-01
...