Вопрос о разнице между двумя датами в R

У меня есть два столбца START и DATE, мне нужно рассчитать разницу между датами (в году, месяце и днях), а затем рассчитать среднее значение разницы (START-END). Спасибо за помощь. Этот вопрос не совпадает с другими вопросами, которые уже были опубликованы ранее.

Данные:

start           end         diff
"2020-5-16"    "2029-7-15"    9 years, 2 months and etc
"2024-5-16"    "2028-3-13"
"2023-4-17"    "2025-4-12"
"2026-7-18"    "2028-5-16"

 star<-c("2020-5-16" ,  "2024-5-16" , "2023-4-17" ,  "2026-7-18")
 end<-c( "2029-7-15", "2028-3-13","2025-4-12","2028-5-16")
 data<-data.frame(star,end)

Это довольно сложный вопрос: разные месяцы имеют разную продолжительность, поэтому «3 года, два месяца, 2 дня» на самом деле не является четко определенным периодом времени. Должны ли мы подразумевать длину января или февраля для этого ответа?

Bernhard 17.02.2023 14:19

@ Бернхард, спасибо за ответ, к сожалению, я не смог получить ваш вопрос. Нужно ли мне добавлять больше информации в данные?

ElenaRose 17.02.2023 14:42
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать lubridate::as.period:

library(lubridate)
star<-c("2020-5-16" ,  "2024-5-16" , "2023-4-17" ,  "2026-7-18")
end<-c( "2029-7-15", "2028-3-13","2025-4-12","2028-5-16")
as.period(interval(as.Date(star), as.Date(end)))
#[1] "9y 1m 29d 0H 0M 0S"  "3y 9m 26d 0H 0M 0S"  "1y 11m 26d 0H 0M 0S" "1y 9m 28d 0H 0M 0S" 

Вы можете использовать функцию difftime(), чтобы получить разницу между двумя датами в секундах. Используя пакет lubridate на языке R

MD Shahid Khan 17.02.2023 14:38

@ MD Shahid Khan, спасибо за функцию answer.difftime(), которая просто выдает результаты либо в годах, либо в месяцах, либо в днях. Мне нужно получить разницу (например: 3 года, два месяца, 1 день), а затем рассчитать среднее значение.

ElenaRose 17.02.2023 14:53

@Маэль, большое спасибо за помощь. Всего один вопрос. Мне нужно рассчитать среднее значение всех этих различий. У меня есть две переменные, START и END, и после расчета разницы между датами мне нужно рассчитать среднее значение. Мне было интересно, как я могу это сделать.

ElenaRose 17.02.2023 15:00
mapply(function(x, y) as.period(interval(x, y)), START, END)
Maël 17.02.2023 15:15

@ Maël, большое спасибо за ваше время, но эта функция работает неправильно. После расчета столбца diff мне нужно рассчитать среднее значение diff. Не могли бы вы проверить вопрос и изменить свой код.

ElenaRose 17.02.2023 15:23

См. редактирование, интервал векторизован, так что нет проблем

Maël 17.02.2023 15:34

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

ElenaRose 17.02.2023 15:44

Вы можете сделать as.period(mean(interval(as.Date(star), as.Date(end)))), но вы получите секунды. Без контрольной точки вы не можете вычислить периоды, потому что годы имеют разную длину.

Maël 17.02.2023 15:59

Другие вопросы по теме