2012-11-05 30 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