2012-11-05 28 views
8

Tôi có một DataFrame hiện trông như thế này:Làm thế nào để thay thế ngày số với các tên tháng cho một cột trong 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 

Khung dữ liệu được gọi là df3 và cột cụ thể tôi đang tìm cách để thay thế các ngày cho là df3$DATETIME.

tôi có chức năng này trong mã của tôi đã để dải datetime:

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

Tất cả Tôi đang tìm kiếm để thay thế tất cả các thông tin datetime với tên tháng đơn giản. Đây là hình thức của nó sau khi hàm thay thế:

 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 

Tôi đang tìm kiếm toàn bộ chức năng cột thay thế đơn giản, nhưng dường như không thể tìm thấy nó. Tôi biết rằng tôi có thể sử dụng chức năng as.Date() với số %B được định dạng để trả lại tháng không được sửa đổi. Vấn đề duy nhất là tôi không biết cách sử dụng nó để thay thế các giá trị cột đã tồn tại.

tôi có thể liệt kê các tháng sử dụng chức năng này:

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

Trả lời

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

Cảm ơn ... tôi đã rất gần. – Jonny

+1

chỉ cần một bước nhỏ để đi ... – seancarmody

2

Thay vì thay thế một cột, bạn có thể ghi đè lên các dữ liệu trong một không mong muốn (và đổi tên nó nếu bạn muốn).

Và để chuyển đổi dữ liệu, tôi sẽ sử dụng tháng() cùng với ymd(), cả hai đều từ gói 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" 

Phụ Lục: Lý do tôi đề nghị các chức năng lubridate hơn months() từ cơ sở R là rằng months() lợi nhuận char lớp trong khi lubridate của month() trả về một yếu tố ra lệnh, có thể hữu ích:

> #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

là có cách để trích xuất tháng và năm từ định dạng y-m-d ví dụ: chúng tôi có 2016-10-01 và chúng tôi muốn 2016-tháng 10 – urwaCFC

Các vấn đề liên quan