【发布时间】:2014-02-11 03:28:26
【问题描述】:
我有一个从这个website 获得的数据集。在这个数据集中有一个“日期”列,它的类是因子。我需要将它们转换为日期类。所以我的问题是;
- 我应该如何将其转换为日期?
- 如何处理诸如“1/2011-12/2012”之类的间隔日期
- 只有月份和年份值?所以这会导致一些问题,我该如何解决这个问题?
【问题讨论】:
标签: r
我有一个从这个website 获得的数据集。在这个数据集中有一个“日期”列,它的类是因子。我需要将它们转换为日期类。所以我的问题是;
【问题讨论】:
标签: r
不确定这是否是您想要的,但这是一种方法:
df <- read.csv("map.csv")
dates <- t(data.frame(strsplit(as.character(df$Date),"-")))
df$dateFrom <- as.Date(paste0("01/",dates[,1]), format="%d/%m/%Y")
df$dateTo <- as.Date(paste0("01/",dates[,2]), format="%d/%m/%Y")
head(df[,c("Date","dateFrom","dateTo")])
# Date dateFrom dateTo
# 1 1/2010-12/2010 2010-01-01 2010-12-01
# 2 1/2011-12/2011 2011-01-01 2011-12-01
# 3 1/2012-11/2012 2012-01-01 2012-11-01
# 4 12/2012 2012-12-01 2012-12-01
# 5 1/2013-12/2013 2013-01-01 2013-12-01
# 6 12/2012 2012-12-01 2012-12-01
这会将您的“Date”字段解析为“from”和“to”日期,并将它们作为额外的列添加到df。由于as.Date(...) 确实需要一个完整的日期(仅靠月份和年份是不够的),所以我在所有情况下都将日期强制为每月的第一天。
【讨论】:
Added Source information for vaccine map.csv,然后运行了这段代码。有两行“日期”仅为一年。这些解析为NA。其他一切都正确解析。 range(df$dateFrom,na.rm=T) 产生:"2008-01-01" "2014-02-01" 和 range(df$dateTo,na.rm=T) 产生 "2008-09-01" "2014-02-01"。