2014-02-11 29 views
0

我有一個從這個website得到的數據集。在這個數據集中有一個「日期」列,它的類是因子。我需要將它們轉換爲日期類。所以我的問題是;將因子類中的間隔日期轉換爲日期類別?

  1. 我應該如何將它轉換爲日期?
  2. 如何處理間隔日期,如「1/2011-12/2012」
  3. 只有月和年的值?所以這造成了一些問題,我該如何解決這個問題?

回答

0

不知道這是否是你想要的,但這裏有一個方法:

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 

這個分析你的「日期」字段爲「從」和「到」的日期,並增加了那些作爲額外的列到df。由於as.Date(...)確實需要一個完整的日期(僅有月和年是不夠的),所以我強迫這些日期到達所有情況下的月份的第一天。

+0

我非常感謝您的幫助。當我輸入這段代碼時,幾乎一切正常。但是,某些日期格式與0010-05-01相似,而不是2010-05-01。你有什麼想法解決這個問題嗎?先謝謝你。 – Ram

+0

不確定你的意思。我下載了相同的文件'疫苗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「'。 – jlhoward

+0

我現在得到了同樣的結果。實際上,我還有一個問題。我在這個項目中的目標是繪製按時間分佈的爆發(日期)。你能給我一些建議嗎?我如何爲每種疾病創造一個情節?非常感謝您的回覆。 – Ram