Как избежать преобразования значений в формате даты в числовые при назначении матрицы или фрейму данных?
Я столкнулся с проблемой, которую не понимаю, и мне не удалось найти ответ на этот вопрос на этом веб-сайте (я постоянно сталкиваюсь с ответами о том, как преобразовать даты в числовые или наоборот, но это именно то, что я не хочу знать).
Проблема заключается в том, что R преобразует значения, отформатированные в виде даты (например, "20-09-1992"), в числовые значения, когда вы присваиваете их матрице или фрейму данных. Например, у нас есть "20-09-1992" с форматом даты, мы проверили это с помощью class()
,
as.Date("20-09-1992", format = "%d-%m-%Y")
class(as.Date("20-09-1992", format = "%d-%m-%Y"))
Теперь мы присваиваем это значение матрице, образно названной Матрица:
Matrix <- matrix(NA,1,1)
Matrix[1,1] <- as.Date("20-09-1992", format = "%d-%m-%Y")
Matrix[1,1]
class(Matrix[1,1])
Внезапно ранее отформатированная дата "20-09-1992" стала числовой со значением 8298. Я не хочу чисел со значением 8298, я хочу дату, которая выглядит как "20-09-1992" в формате даты,
Поэтому мне было интересно, так ли это просто, как работает R, и нам не разрешено назначать даты для матриц и фреймов данных (каким-то образом мне удалось иметь даты в других матрицах / фреймах данных, но меня удивляет, почему эти другие времена были другими)? Существует ли специальный метод присвоения дат фреймам данных и матрицам, которые я пропустил и не смог вывести из предыдущих (каким-то успешным) попыток присвоения дат фреймам / матрицам данных?
3 ответа
Я не думаю, что вы можете хранить даты в матрице. Используйте фрейм данных или таблицу данных. Если вы должны хранить даты в матрице, вы можете использовать матрицу списков.
Matrix <- matrix(NA,1,1)
Matrix[1,1] <- as.list(as.Date("20-09-1992", format = "%d-%m-%Y"),1)
Matrix
[[1]]
[1] "1992-09-20"
Отредактировано: я также только что перечитал, у вас была эта проблема с фреймом данных. Я не уверен почему.
mydate<-as.Date("20-09-1992", format = "%d-%m-%Y")
mydf<-data.frame(mydate)
mydf
mydate
1 1992-09-20
Отредактировано: это был опыт обучения для меня с R и датами. Очевидно, что указанная вами дата была конвертирована в число дней с момента ее возникновения. Происхождение определено как 1 января 1970 года. Чтобы преобразовать это обратно в формат даты в какой-то момент
Matrix
[,1]
[1,] 8298
as.Date(Matrix, origin ="1970-01-01")
[1] "1992-09-20"
Попробуйте следующее: сначала укажите свой вектор даты, а затем используйте
rownames(mat) <- as.character(date_vector)
даты будут отображаться в виде текста.
В основном это происходит, когда мы загружаем книгу Excel.
Вам нужно добавить
detectDates = TRUE
в функции
DataFrame <- read.xlsx("File_Nmae", sheet = 3, detectDates = TRUE)