格式化日期并为日期创建虚拟变量

时间:2021-05-13 07:51:41

标签: r special-characters date-formatting

这里来自一个不太有经验的程序员的问题。我正在尝试创建虚拟变量,表明问题是否发生在 2008 年 9 月 15 日(金融危机)之后。我的数据集的日期格式如下:15-09-2008。由于变量被 R 识别为字符,我尝试通过运行以下代码将其转换为日期:

c$NewDate <- strptime(c$IssueDate, "&d-&m-&Y")

format(c$NewDate, "&Y/&m/&d")

然而,上面的代码已经导致变量 c$NewDate 只返回 NA,而数据帧 c 中根本没有 NA。我真的不明白它来自哪里。

正如我所说,我的主要目标是创建虚拟变量。我已经在 dd-mm-yy 格式中尝试了以下代码:c$GFC <- ifelse(c$IssueDate > as.Date("15-09-2008", origin = "10-01-1986"), 0, 1),但这不起作用。它表示一个 10-01-1986 的问题,一个 1,一个 24-01-1986 的问题,一个零。因此,这根本没有意义。如果有比这更快的方法来创建指示问题是否发生在 15-09-2008 之后的虚拟对象,我也很想知道!

Image showing what's going wrong

Image showing what's going wrong

1 个答案:

答案 0 :(得分:1)

我强烈推荐使用 tidyverselubridate 来处理这个问题。


library(tidyverse)
library(lubridate)

# generate the test data
temp <- data.frame(mytime = c("14-09-2008", "13-5-2021"))


temp <- 
  temp %>%
  
  # create a "tibble" object which can be operated by tidyverse package
  as_tibble() %>%
  
  # transform the format from a character into a date
  mutate(mytime = dmy(mytime)) %>%
  
  # generate indicators
  mutate(indicator = mytime <= dmy("15-09-2008") )

或者你只使用lubridate包:

> temp$mytime
[1] "14-09-2008" "13-5-2021" 
> date_format <- dmy(temp$mytime)
> date_format
[1] "2008-09-14" "2021-05-13"
> ifelse(date_format <= dmy("15-09-2008"), 1, 0)
[1] 1 0