Каково происхождение числовых дат, начинающихся с 6? - PullRequest
9 голосов
/ 05 апреля 2019

У меня есть числа в числовом формате, все начинаются с цифры 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. Дата предлагает много источников, ни один из которых не работает:

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"

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 05 апреля 2019

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

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

Примечание : Спасибо @ Фрэнк за указание на этот пост , который привел меня к первоначальному часто задаваемому вопросу MUMPS. Для справки я опубликовал вопросы и ответы с ответами на свой вопрос, так как поиск в SO и Google дал мало.

2 голосов
/ 05 апреля 2019

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

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...