我是R和tidyverse的新手。现在我遇到了一个问题:
假设我们有字符“ 02-01-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
时,我得到NA
而不是2002-01-01
。
我不明白为什么相同的函数会在mutate内部和外部计算出不同的值。有人可以解释吗?预先谢谢你!
答案 0 :(得分:1)
您的代码对我来说运行正常。
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()
,因为“出生”已经属于类字符了。因此,将其删除:
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