R: проблемы с чтением даты и времени
У меня есть некоторые проблемы с чтением даты и времени надлежащим образом, и мне интересно, почему я получаю эти проблемы. Проблема только в моей установке Windows R. Выполнение точно такого же сценария в моей установке UNIX работает нормально.
По сути, я хочу прочитать файл с данными и временем как второй столбец, например:
TrainData[[i]] = read.csv(TrainFiles[i],header=F, colClasses=c(NA,"POSIXct",rep(NA,8)))
colnames(TrainData[[i]])=c("comp","time","s1","s2","s3","s4","r1","r2","r3","r4")
Однако читаются только даты, а не время, и мои данные выглядят так:
comp time s1 s2 s3 s4 r1 r2 r3 r4
1 1 2009-08-18 711 630 69 600 689 20 40 1
2 5 2009-08-18 725 460 101 705 689 20 40 1
3 6 2009-08-18 711 505 69 678 689 20 40 1
4 1 2009-08-18 705 630 69 600 689 20 40 1
5 2 2009-08-18 734 516 101 671 689 20 40 1
6 3 2009-08-18 743 637 69 595 689 20 40 1
7 4 2009-08-18 730 577 101 633 689 20 40 1
8 2 2009-08-18 721 511 101 674 689 20 40 1
9 3 2009-08-18 747 563 101 642 689 20 40 1
10 4 2009-08-18 716 572 101 636 689 20 40 1
Запуск точно такого же cond в UNIX вернул время и даты. Когда я читаю в другом файле в том же сценарии с датами и временем в двух первых столбцах, я получаю правильный формат даты / времени:
TrainData[[i]]=read.csv(TrainFiles[i],header=F, colClasses=c("POSIXct","POSIXct",NA))
colnames(TrainData[[i]])=c("start","end","fault")
возвращается
start end fault
1 2010-10-24 04:25:53 2010-10-24 11:22:33 6
2 2010-10-30 12:57:16 2010-11-02 12:29:54 6
3 2010-11-05 10:40:17 2010-11-05 11:59:51 6
4 2010-11-05 17:07:37 2010-11-06 14:30:01 6
5 2010-11-06 23:59:59 2010-11-07 00:14:49 6
6 2010-11-06 23:59:59 2010-11-07 00:14:49 6
7 2010-11-06 23:59:59 2010-11-07 00:14:49 6
8 2010-11-06 23:59:59 2010-11-07 00:14:49 6
9 2010-11-06 23:59:59 2010-11-07 00:14:50 6
10 2010-11-06 23:59:47 2010-11-07 00:14:51 6
На самом деле, я нашел решение, которое работает, в конце концов, но мне интересно, почему я получаю эти проблемы. Похоже, что мой Sys.timezone настроен на "Европа / Берлин". Если я установлю это на NA, то время будет также считано, т.е. используя Sys.setenv(tz=NA)
, Если я затем запускаю тот же код, мои данные выглядят так:
comp time s1 s2 s3 s4 r1 r2 r3 r4
1 1 2009-08-18 18:12:00 711 630 69 600 689 20 40 1
2 5 2009-08-18 18:14:27 725 460 101 705 689 20 40 1
3 6 2009-08-18 18:14:31 711 505 69 678 689 20 40 1
4 1 2009-08-18 18:14:43 705 630 69 600 689 20 40 1
5 2 2009-08-18 18:14:47 734 516 101 671 689 20 40 1
6 3 2009-08-18 18:14:51 743 637 69 595 689 20 40 1
7 4 2009-08-18 18:15:00 730 577 101 633 689 20 40 1
8 2 2009-08-18 18:29:33 721 511 101 674 689 20 40 1
9 3 2009-08-18 18:29:37 747 563 101 642 689 20 40 1
10 4 2009-08-18 18:29:45 716 572 101 636 689 20 40 1
Другой файл все еще получает время, но теперь последовательно два часа отличается.
Вот как выглядят csv-файлы (в основном текст, разделенный запятыми): это мой файл (в основном текст, разделенный запятыми):
1,2009-08-18 18: 12: 00,711,630,69,600,689,20,40,1
5,2009-08-18 8: 14: 27,725,460,101,705,689,20,40,1
6,2009-08-18 18: 14: 31,711,505,69,678,689,20,40,1
1,2009-08-18 18: 14: 43,705,630,69,600,689,20,40,1
2 200,98-18 8: 14 47,734,516,101,671,689,20,40,1
3,2009-18: 18: 14: 51,743,637,69,595,689,20,40,1
4,2009-18: 8: 15: 00,730,577,101,633,689,20,40,1
2,2009-18-18 8: 29: 33,721,511,101,674,689,20,40,1
3,2009-18-18 8: 29: 37,747,563,101,642,689,20,40,1
4,2009-08-18 8: 29: 45,716,572,101,636,689,20,40,1
Почему у меня такие проблемы с чтением в разы? Я ожидаю, что неправильно использовать tz=NA, но это единственный способ, который я нашел для работы. Может кто-нибудь помочь мне понять, почему времена игнорируются, когда tz = "Европа / Берлин"? Вообще рекомендуется ставить tz = NA при чтении таких файлов? Даже если кажется, что это работает при чтении во времени, tz="NA" выдает предупреждающие сообщения, когда позже я хочу работать с данными:
Warning message:
In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'NA'
Может ли кто-нибудь помочь мне объяснить различия, которые я получаю?