r - 格式化日期并为日期创建虚拟变量
问题描述
来自一位经验不足的程序员的问题.. 我正在尝试创建虚拟变量来指示问题是否在 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)
,但这不起作用。它表示 1986 年 1 月 1 日发行的 1 和 1986 年 1 月 24 日发行的 0。因此,这根本没有意义。如果有比这更快的方法来创建指示问题是否在 2008 年 9 月 15 日之后出现的虚拟对象,我也很想知道!
解决方案
我强烈推荐tidyverse
andlubridate
来处理这个问题。
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
包:</p>
> 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
推荐阅读
- javascript - Mini-Max Sum - 错误的输出
- c# - 为什么这个循环 7 次而不是 5 次?
- node.js - 如何在 Mongoose 中返回包含特定 ID 关系的所有文档?
- python - Django 模板不会加载,但 HttpResponse 会
- mysql - 四舍五入到最接近的百分比
- microsoft-edge-extension - 使用现有扩展 ID 将 Edge 扩展上传到网上商店
- erlang - 复制转换后的表 erlang mnesia
- r - MongoDB - 从多个值对创建矩阵的文档结构
- react-native - “找不到 com.google.jimfs:jimfs:1.1”将 RN 项目升级到 AndroidX
- c# - 仅使用 HtmlAgilityPack 从 SelectNode 中获取一些内部文本