2014-04-28 14 views
10

Đây là thông tin chứa trong dataframe tôi:Chuyển đổi Factor để Date/Time trong R

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",... 
## dDdt: num 7.8564 2.318 ... 
## minutes: POSIXlt, format: NA NA NA 

tôi cần phải chuyển đổi phút của cột ngày sang một định dạng ngày/giờ:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S") 

Tôi đã thử as.POSIXlt, as.POSIXctas.Date. Không ai trong số đó làm việc. Có ai có bất cứ suy nghĩ nào.

Mục tiêu là vẽ số phút so với dDdt, nhưng nó sẽ không cho phép tôi vẽ trong khoảng thời gian đã chỉ định mà tôi muốn làm yếu tố. Tôi không biết phải cố gắng làm gì tiếp theo ...

+0

Bạn cần chọn câu trả lời để câu hỏi này sẽ được trả lời. –

Trả lời

14

Bạn cần phải chèn as.character() trước khi phân tích cú pháp dưới dạng Ngày giờ hoặc Ngày.

Một yếu tố sẽ luôn quay trở lại đầu tiên dưới dạng một con số tương ứng với cấp độ của nó.

Bạn có thể lưu chuyển đổi từ yếu tố này sang ký tự khác bằng cách yêu cầu read.csv() v.v. không lưu trữ dưới dạng hệ số: stringsAsFactors=FALSE. Bạn cũng có thể thiết lập đó như là một tùy chọn toàn cục.

Một khi bạn có nó như là nhân vật, chắc chắn rằng bạn phù hợp với chuỗi định dạng dữ liệu của bạn:

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S") 
[1] "2013-06-01 08:07:00 CDT" 
R> 

Lưu ý %Y-%m-%d tôi đã sử dụng, như trái ngược với %m/%d/%y của bạn.

Edit trên ngày 03 tháng 1 năm 2016: này bây giờ là dễ dàng hơn nhiều nhờ vào gói anytime mà Automagically chuyển đổi từ nhiều loại, bao gồm factor, và làm như vậy mà không đòi hỏi một chuỗi định dạng.

R> as.factor("2013-06-01 08:07:00") 
[1] 2013-06-01 08:07:00 
Levels: 2013-06-01 08:07:00 
R> 
R> library(anytime) 
R> anytime(as.factor("2013-06-01 08:07:00")) 
[1] "2013-06-01 08:07:00 CDT" 
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00"))) 
[1] "POSIXct" "POSIXt" 
R> 

Như bạn có thể thấy, chúng tôi chỉ đưa biến yếu tố vào anytime() và chọn loại POSIXct mong muốn.

+0

Tôi nghĩ rằng ông đã chèn 'as.character' vấn đề là ông có một lỗi trong các định dạng imo –

+0

Cảm ơn, tôi nhận thấy rằng quá thứ hai đọc và mở rộng câu trả lời của tôi. Vấn đề còn lại (câu trả lời của bạn lặp lại) là chuyển đổi 'as.POSIXlt' (không trích xuất phút). –

7

Hãy thử điều này

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

này sẽ trở lại phút minuteave $ như một đối tượng POSIXct.

Hy vọng điều này sẽ giúp bạn.

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