Как избежать преобразования значений в формате даты в числовые при назначении матрицы или фрейму данных?

Я столкнулся с проблемой, которую не понимаю, и мне не удалось найти ответ на этот вопрос на этом веб-сайте (я постоянно сталкиваюсь с ответами о том, как преобразовать даты в числовые или наоборот, но это именно то, что я не хочу знать).

Проблема заключается в том, что 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)
Другие вопросы по тегам