在R中将数字/字符列转换为日期格式

在R中将数字/字符列转换为日期格式,r,R,我的数据集中有一个日期列,格式不正确,看起来像“825”,意思是8月25日。现在我需要创建一个新的列,该列将日期列作为输入并返回我,无论是工作日还是周末,但首先我必须将其转换为正确的格式 所有日期均从2017年开始。如果您可以从列的非数字版本开始(因此,保持0),一个可能的解决方案是: x <- "0825" x <- paste(x, "2017", sep ="") y<- as.Date(as.character(x), "%m%d%Y") wd <- weekda

我的数据集中有一个日期列,格式不正确,看起来像“825”,意思是8月25日。现在我需要创建一个新的列,该列将日期列作为输入并返回我,无论是工作日还是周末,但首先我必须将其转换为正确的格式


所有日期均从2017年开始。

如果您可以从列的非数字版本开始(因此,保持0),一个可能的解决方案是:

x <- "0825"
x <- paste(x, "2017", sep ="")
y<- as.Date(as.character(x), "%m%d%Y")
wd <- weekdays(y)

x考虑这个虚拟示例:

df <- data.frame(orig = c("821", "1201", "121", "111", "222"))
# orig
# 821
# 1201
# 121
# 111
# 222

# Convert it to date
library(lubridate)
df$date <- ymd(paste("2017", gsub("(..)$", " \\1", df$orig)))
# orig       date
# 821  2017-08-21
# 1201 2017-12-01
# 121  2017-01-21
# 111  2017-01-11
# 222  2017-02-22

# Extract day and define if it's weekend
df$day <- format(df$date, "%a")
df$weekend <- ifelse(df$day %in% c("Sat", "Sum"), TRUE, FALSE)
# orig       date day weekend
# 821  2017-08-21 Mon   FALSE
# 1201 2017-12-01 Fri   FALSE
# 121  2017-01-21 Sat    TRUE
# 111  2017-01-11 Wed   FALSE
# 222  2017-02-22 Wed   FALSE

df是“121”1月21日还是12月1日?是1月21日。为什么不是12月?如果您不发布数据,我们无法知道这一点。最初,数字前有一个“0”,但由于它是数字,因此被删除。12月1日是1201。@Ashish您能从非数字版本开始吗?谢谢您的帮助@Barbara@Ashish我现在还添加了代码来添加它所做的工作日。非常感谢。