Saya memiliki file yang berisi informasi tanggal dan waktu sebagai string karakter. Saya ingin mengubahnya menjadi objek POSIXlt datetime dan untuk itu saya menggunakan fungsi dasar strftime() di R.

Sementara perintah berfungsi dengan baik ketika saya memberikannya string karakter, atau ketika saya menerapkannya sepotong kecil kerangka data, ketika saya menerapkannya di irisan yang lebih besar atau di seluruh datadrame gagal menangkap Jam. Silahkan lihat di bawah ini:

d = "2017-11-18 01:00:00"
t = strftime(d, format = "%Y-%m-%d %H:%M")
t
'2017-11-18 01:00'

head(data %>% dplyr::slice(1:1000) %>% mutate(DateTime1 = strftime(DateTime, format = "%Y-%m-%d %H:%M")))
DateTime    Junction    Vehicles    ID  DateTime1
2015-11-01 00:00:00 1   15  20151101001 2015-11-01 00:00
2015-11-01 01:00:00 1   13  20151101011 2015-11-01 01:00
2015-11-01 02:00:00 1   10  20151101021 2015-11-01 02:00
2015-11-01 03:00:00 1   7   20151101031 2015-11-01 03:00
2015-11-01 04:00:00 1   9   20151101041 2015-11-01 04:00
2015-11-01 05:00:00 1   6   20151101051 2015-11-01 05:00

head(data %>% mutate(DateTime1 = strftime(DateTime, format = "%Y-%m-%d %H:%M")))
DateTime    Junction    Vehicles    ID  DateTime1
2015-11-01 00:00:00 1   15  20151101001 2015-11-01 00:00
2015-11-01 01:00:00 1   13  20151101011 2015-11-01 00:00
2015-11-01 02:00:00 1   10  20151101021 2015-11-01 00:00
2015-11-01 03:00:00 1   7   20151101031 2015-11-01 00:00
2015-11-01 04:00:00 1   9   20151101041 2015-11-01 00:00
2015-11-01 05:00:00 1   6   20151101051 2015-11-01 00:00

Bagaimana perilaku tidak menentu ini dijelaskan dan bagaimana saya bisa mengonversi kolom datetime untuk seluruh kumpulan data?

Saran Anda akan dihargai.

0
rf7 18 November 2017, 14:39

1 menjawab

Jawaban Terbaik

Saya tidak tahu persisnya, tetapi mungkin ada beberapa ketidakkonsistenan dalam variabel DateTime Anda. Karena tampaknya menjadi variabel karakter, ketika versi vektor dari konversi Anda menemukan perilaku yang tidak terduga, itu tidak akan menanganinya dengan baik karena konversi yang sama diterapkan ke setiap entri (ini akan menggunakan format yang berfungsi di semua kasus), itu mungkin alasan mengapa itu bekerja dalam irisan. Saya menyarankan untuk meningkatkan ukuran irisan Anda secara bertahap untuk melacak di mana ketidakkonsistenan muncul (mungkin ada cara yang lebih cerdas untuk memeriksanya).

Catatan lain adalah bahwa strftime memerlukan argumen pertamanya untuk dapat dikonversi ke POSIXlt, jadi saya sarankan untuk meneruskan objek POSIXlt untuk menghindari fungsi Anda memilih cara mengonversi string asli Anda. Anda dapat menggunakan misalnya:

t = strftime(strptime(d, format = "%Y-%m-%d %H:%M:%OS"), format = "%Y-%m-%d %H:%M")

Kemudian, semoga, ketika mengonversi variabel karakter Anda ke POSIXlt seperti yang Anda harapkan, melalui strptime, itu akan menimbulkan kesalahan karena baris yang tidak konsisten.

Solusi ketiga, tetapi tidak sebaik adalah menggunakan rowwise(), apa yang akan mengonversi setiap baris secara terpisah, menghasilkan hasil yang diharapkan kecuali untuk inkonsistensi (Ini akan mencari format yang sesuai di setiap baris, alih-alih satu format yang berfungsi untuk semua orang).

0
Freguglia 18 November 2017, 13:10