2015-04-28 15 views
6

Tôi có khung dữ liệu với 10 ngày mà tôi đã đọc thành R làm số nguyên. Đây là khung dữ liệu:khung dữ liệu nguyên cho đến nay trong R

19820509 
19550503 
20080505 
19590505 
19940517 
19690504 
20050420 
20060503 
19840427 
19550513 

Chúng tôi sẽ gọi nó là df.

tôi đã cố gắng một vài dòng mã khác nhau ở đây chỉ đơn giản là thay đổi mỗi giá trị để định dạng ngày trong R như thế này: "1982-05-09"

df <- as.Date(df, "%Y%m%d") 

không làm việc và cũng như thế

df <- as.POSIXlt(df, format = "%Y/%m/%d") 

hoặc

df <- as.POSIXct(df), format = "%Y/%m/%d", origin = "19820509") 

Tôi tiếp tục gặp lỗi khi nói "không biết cách chuyển đổi 'd f 'đến lớp "ngày" hoặc một trong các định dạng POSIX.

Tôi nghĩ điều này sẽ đơn giản hơn. Bất kỳ ý tưởng?

Cảm ơn bạn.

+6

Bạn phải sử dụng cột này ở cột của khung dữ liệu, chứ không phải khung dữ liệu. –

+0

Ở đây một giải pháp POSIX nơi df là data.frame của bạn: 'as.POSIXct (as.character (df [, 1]), định dạng ="% Y% m% d ")' –

Trả lời

7

Bạn phải tham chiếu các cột cụ thể thay vì chỉ tham chiếu đến khung dữ liệu. Nếu biến có chứa các số nguyên ngày là trong một khung dữ liệu df và được gọi là x, bạn có thể làm điều này:

df <- transform(df, x = as.Date(as.character(x), "%Y%m%d")) 

#    x 
# 1 1982-05-09 
# 2 1955-05-03 
# 3 2008-05-05 
# 4 1959-05-05 
# 5 1994-05-17 
# 6 1969-05-04 
# 7 2005-04-20 
# 8 2006-05-03 
# 9 1984-04-27 
# 10 1955-05-13 

này chuyển đổi số nguyên để chuỗi ký tự, sau đó giải thích các dây như chà là.

Nếu bạn nhiều cột chứa ngày tháng trong định dạng này, bạn thể chuyển đổi chúng trong một ngã swoop, nhưng bạn phải làm điều đó hơi khác nhau:

df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%Y%m%d"))) 

Hoặc thậm chí tốt hơn, như docendo discimus đề cập trong nhận xét:

df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")) 
+0

Hoạt động!Tôi đã thử điều đó ban đầu, nhưng nó vẫn đang kén chọn. Việc chuyển đổi ký tự hoạt động. Cảm ơn bạn. – user3720887

+0

@ user3720887: Tôi rất vui vì nó phù hợp với bạn. –

+1

Đối với mã lapply, bạn có thể sửa đổi nó thành: 'df [] <- lapply (df, function (x) as.Date (as.character (x),"% Y% m% d "))' so bạn không cần cuộc gọi data.frame –

4

Đây là giải pháp của tôi, yêu cầu gói lubridate. Bạn có thể sử dụng chức năng ymd của gói lubridate làm "chức năng thay thế". Chỉ cần chọn cột bạn muốn chuyển đổi quảng cáo thay thế nó bằng phiên bản ymd của nó.

library(lubridate) 
data[ , 1 ] <- ymd(data[, 1]) 

Gói này cung cấp nhiều chức năng hơn để phân tích dữ liệu hoặc chuỗi thành ngày, ymd (y = năm, m = tháng, d = ngày) tất cả với lược đồ đơn giản này.

+0

Cảm ơn bạn! Có, tôi đã xem xét gói này nhiều hơn để xử lý các tác vụ có liên quan đến ngày khác nhau trong R. – user3720887

0

v = c (dữ liệu $ NGÀY)

ngày < - as.Date (dán (v), định dạng ("% Y% m% d"))

ngày

dữ liệu $ DATE là ngày mang cột ở định dạng số nguyên như 20000131, 20000201

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