Pertanyaan:
Apakah ada cara untuk menentukan format Tanggal saat menggunakan argumen colClasses di read.table / read.csv?
(Saya menyadari bahwa saya dapat mengonversi setelah mengimpor, tetapi dengan banyak kolom tanggal seperti ini, akan lebih mudah melakukannya di langkah impor)
Contoh:
Saya memiliki .csv dengan kolom tanggal dalam format %d/%m/%Y
.
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
Ini membuat konversi salah. Misalnya, 15/07/2008
menjadi 0015-07-20
.
Kode yang dapat direproduksi:
data <-
structure(list(func_loc = structure(c(1L, 2L, 3L, 3L, 3L, 3L,
3L, 4L, 4L, 5L), .Label = c("3076WAG0003", "3076WAG0004", "3076WAG0007",
"3076WAG0009", "3076WAG0010"), class = "factor"), order_type = structure(c(3L,
3L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 1L), .Label = c("PM01", "PM02",
"PM03"), class = "factor"), actual_finish = structure(c(4L, 6L,
1L, 2L, 3L, 7L, 1L, 8L, 1L, 5L), .Label = c("", "11/03/2008",
"14/08/2008", "15/07/2008", "17/03/2008", "19/01/2009", "22/09/2008",
"6/09/2007"), class = "factor")), .Names = c("func_loc", "order_type",
"actual_finish"), row.names = c(NA, 10L), class = "data.frame")
write.csv(data,"data.csv", row.names = F)
dataImport <- read.csv("data.csv")
str(dataImport)
dataImport
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
str(dataImport)
dataImport
Dan seperti inilah hasilnya:
r
date
read.table
read.csv
Tommy O'Dell
sumber
sumber
read.table
dan menambahkanformat
argumen yang diteruskan keas.Date
. Saya tidak akan terkejut jika ada cara yang lebih baik yang tidak saya pikirkan.Jawaban:
Anda dapat menulis fungsi Anda sendiri yang menerima string dan mengubahnya menjadi Tanggal menggunakan format yang Anda inginkan, lalu gunakan
setAs
untuk menyetelnya sebagaias
metode. Kemudian Anda dapat menggunakan fungsi Anda sebagai bagian dari colClasses.Mencoba:
Kemudian ubah jika perlu untuk mengerjakan data Anda.
Edit ---
Anda mungkin ingin menjalankannya
setClass('myDate')
terlebih dahulu untuk menghindari peringatan tersebut (Anda dapat mengabaikan peringatan tersebut, tetapi dapat mengganggu jika Anda sering melakukan ini dan ini adalah panggilan sederhana yang menghilangkannya).sumber
setMethod('myDate')
harus dilakukan? Menjalankannya hanya memberi saya kesalahan ...setClass
(diperbaiki sekarang). Apa yang dilakukannya adalah mencegahsetAs
dikeluarkannya peringatan tentang 'myDate' tidak ada sebagai kelas. Peringatan itu tidak berbahaya dan semuanya masih berfungsi, tetapi menyetel kelas berarti Anda bahkan tidak melihat peringatan itu.Jika hanya ada 1 format tanggal yang ingin Anda ubah, Anda dapat menggunakan
Defaults
paket untuk mengubah format default di dalamnyaas.Date.character
Saya pikir jawaban @Greg Snow jauh lebih baik, karena tidak mengubah perilaku default dari fungsi yang sering digunakan.
sumber
Jika Anda membutuhkan waktu juga:
sumber
Dahulu kala, sementara itu masalah telah diselesaikan oleh Hadley Wickham. Jadi saat ini solusinya direduksi menjadi satu langkah:
Mungkin kita bahkan ingin menyingkirkan hal-hal yang tidak perlu:
sumber