2012-11-05 35 views
8

替換月份名稱的數字日期一欄我有一個當前的數據幀,看起來像這樣:如何R中

 DATETIME MEAS_AVG TARG_MIN TARG_AVG TARG_MAX DESPORT_NOTE 
1 2012/04/10 14:03:37 0.2888  0.22  0.25  0.27  GOOD_PT 
2 2012/03/30 07:48:17 0.2544  0.22  0.25  0.27  GOOD_PT 
3 2012/03/24 19:23:08 0.2333  0.22  0.25  0.27  GOOD_PT 
4 2012/03/25 16:10:17 0.2111  0.22  0.25  0.27  GOOD_PT 
5 2012/04/10 00:58:29 0.2222  0.22  0.25  0.27  GOOD_PT 
6 2012/04/14 18:32:52 0.2888  0.22  0.25  0.27  GOOD_PT 
7 2012/04/21 14:47:47 0.2777  0.22  0.25  0.27  GOOD_PT 

數據幀被稱爲df3和具體的專欄中,我在找更換日期爲df3$DATETIME

我有這個功能在我的代碼已經在爲了剝離日期時間:

date <- strptime(df3$DATETIME, "%Y/%m/%d %H:%M:%S") 

所有我期待全部更換簡單月份名稱的日期時間信息。這是它應該是什麼樣子的替換功能後:

 DATETIME MEAS_AVG TARG_MIN TARG_AVG TARG_MAX DESPORT_NOTE 
1 April 0.2888  0.22  0.25  0.27  GOOD_PT 
2 March 0.2544  0.22  0.25  0.27  GOOD_PT 
3 March 0.2333  0.22  0.25  0.27  GOOD_PT 
4 March 0.2111  0.22  0.25  0.27  GOOD_PT 
5 April 0.2222  0.22  0.25  0.27  GOOD_PT 
6 April 0.2888  0.22  0.25  0.27  GOOD_PT 
7 April 0.2777  0.22  0.25  0.27  GOOD_PT 

我一直到處找一個簡單的更換色譜柱的功能,但似乎無法找到它。我知道我可以使用as.Date()函數和格式爲%B的函數返回未經修正的月份。唯一的問題是我不知道如何使用它來替換已存在的列值。

我可以使用此功能列出月:

list(month=months(as.Date(df3$DATETIME))) 

回答

17
df3$DATETIME <- months(as.Date(df3$DATETIME)) 
+0

謝謝...我是如此接近。 – Jonny

+1

只是一小步... – seancarmody

2

,而不是更換一列,可以覆蓋在不需要一個數據(如果你想將其重命名)。

,並將數據轉換,我會用年月日()一起使用一個月(),無論是從lubridate包:

#install and load lubridate if not already done 
install.packages("lubridate",repos="http://cran.us.r-project.org") 
library(lubridate) 

#transform data to month names 
df3$DATETIME <-month(ymd(df3$DATETIME), label = TRUE, abbr = FALSE) 

#rename if desired 
names(df3)[which(names(df3)=="DATETIME")]<-"MONTH" 

附錄:我之所以建議lubridate功能,而不是months()從基礎R是這months()返回炭類,而lubridate的month()返回一個有序的因素,這可能是有用的:

> #base function 
> m2=months(as.Date("08/12/1990")) 
> m1=months(as.Date("07/12/1990")) 
> m1<m2 
[1] FALSE 
> 
> #lubridate 
> m2=month(mdy("08/12/1990"),label=TRUE, abbr=FALSE) 
1 parsed with %m/%d/%Y 
> m1=month(mdy("07/12/1990"),label=TRUE, abbr=FALSE) 
1 parsed with %m/%d/%Y 
> m1<m2 
[1] TRUE 
> m1 
[1] July 
12 Levels: January < February < March < April < May < June < ... < December 
> str(m1) 
Ord.factor w/ 12 levels "January"<"February"<..: 7 
+0

有沒有一種方法可以從y-m-d格式中提取月份和年份 例如我們有2016-10-01,我們希望2016-Oct – urwaCFC