У меня есть числовые даты, начинающиеся с цифры 6 , я знаю, что x дата находится между startDate и endDate.

Пример данных:

#dput(df1)
df1 <- structure(list(
  startDate = structure(c(9748, 11474, 12204, 12204), class = "Date"),
  endDate = structure(c(16645, 16535, 13376, 15863), class = "Date"),
  x = c(63719L, 63622L, 60448L, 62940L)), 
  row.names = c(NA, -4L), class = "data.frame")

? as.Date предлагает множество источников, но ни один из них не работает:

as.Date(63719, origin = "1900-01-01")
# [1] "2074-06-16"
as.Date(63719, origin = "1899-12-30")
# [1] "2074-06-14"
as.Date(63719, origin = "1904-01-01")
# [1] "2078-06-15"
as.Date(63719, origin = "1970-01-01")
# [1] "2144-06-16"

Любые идеи?

9
zx8754 5 Апр 2019 в 11:32

2 ответа

Лучший ответ

Источником может быть дата происхождения MUMPS "1840-12-31", причина этой даты объяснена в faq языка MUMPS:

27. «Что случилось в 1841 году?»

Когда я определился со спецификациями для распорядка дня, я вспомнил, как читал самого старого (одного из старейших?) Гражданина США, ветерана гражданской войны, которому в то время было 121 год. Так как я хотел иметь возможность представлять даты в форме юлианского типа, чтобы можно было легко рассчитать возраст и иметь возможность представлять любую дату рождения в выбранном числовом диапазоне, я решил, что начальной датой в начале 1840-х годов будет « сейф.' Поскольку мой алгоритм работал наиболее логично, когда каждый четвертый год был високосным, первый год был принят за 1841 год. Тогда нулевая точка была 30 декабря 1840 года ...

Это происхождение 31 декабря 1840 года или 1 января 1841 года. Я не был участником переговоров по MDC, но я объяснил логику своего выбора членам Комитета.

Системное время Википедии:

Language/Application    Function or variable    Resolution  Epoch or range
MUMPS                   $H (short for $HOROLOG) 1 s         31 December 1840

Проверим:

df1$xClean <- as.Date(df1$x, origin = "1840-12-31")
df1$xClean > df1$startDate & df1$xClean < df1$endDate
# [1] TRUE TRUE TRUE TRUE

Примечание . Спасибо @Frank за то, что указал мне на этот блог, который привел меня к исходному часто задаваемому вопросу MUMPS. Я разместил ответы на вопросы для справки, так как поиск в SO и Google не дал многого.

8
zx8754 5 Апр 2019 в 08:48

Вы уже нашли ответ, но для удовольствия, вот фрагмент кода для автоматизации этого:

library(rvest)
library(tidyverse)
library(magrittr)

df1 <- structure(list(
  startDate = structure(c(9748, 11474, 12204, 12204), class = "Date"),
  endDate = structure(c(16645, 16535, 13376, 15863), class = "Date"),
  x = c(63719L, 63622L, 60448L, 62940L)), 
  row.names = c(NA, -4L), class = "data.frame")

epochs <- read_html("https://en.wikipedia.org/wiki/Epoch_(computing)") %>%
  html_nodes(xpath = '//*[@id="mw-content-text"]/div/table') %>%
  html_table() %>%
  extract2(1) %>%
  set_names(c("epoch", "users", "rationale")) %>%
  mutate(epoch_date = parse_date(epoch, "%B %d, %Y", locale = locale("en"))) %>%
  filter(!is.na(epoch_date)) 

potential_origins <- map_lgl(epochs$epoch_date,
                             function(origin) {
                               d <- as.Date(df1$x, origin = origin)
                               all(d >= df1$startDate & d <= df1$endDate)
                             })

epochs$users[potential_origins]
# [1] "MUMPS programming language"
2
thothal 5 Апр 2019 в 10:55