gpt4 book ai didi

r - 使用 2 个日期获取不同月份的天数

转载 作者:行者123 更新时间:2023-12-04 09:31:53 24 4
gpt4 key购买 nike

我有一个数据集输入,我想将其转换为数据集输出。基本上,我试图操作数据集,以便能够将两个日期之间的天数分成不同的月份。想知道这是否可以在 R 中完成?

用于创建以下数据集的 R 代码,以方便引用。

library('data.table')
input=data.table(SerialNum=c(1,2),StartDate=c('28/01/2015','28/01/2015'),EndDate=c('03/02/2015','03/03/2015'))

# SerialNum StartDate EndDate
# 1: 1 28/01/2015 03/02/2015
# 2: 2 28/01/2015 03/03/2015


output=data.table(SerialNum=c(1,1,2,2,2),
StartDate=c('28/01/2015','28/01/2015','28/01/2015','28/01/2015','28/01/2015'),
EndDate=c('03/02/2015','03/02/2015','03/03/2015','03/03/2015','03/03/2015'),
MMMYY=c('Jan15','Feb15','Jan15','Feb15','Mar15'),
Days=c(4,3,4,28,3))

# SerialNum StartDate EndDate MMMYY Days
# 1: 1 28/01/2015 03/02/2015 Jan15 4
# 2: 1 28/01/2015 03/02/2015 Feb15 3
# 3: 2 28/01/2015 03/03/2015 Jan15 4
# 4: 2 28/01/2015 03/03/2015 Feb15 28
# 5: 2 28/01/2015 03/03/2015 Mar15 3

最佳答案

您可以通过创建从 StartDateEndDate 的序列并从中提取月年变量(示例中的 mnth以下)。接下来,您通过 serialNum 和新创建的月年变量 (mnth) 进行汇总:

input[, .(mnth = format(seq(StartDate,EndDate,"day"), "%b%y")),
by = .(SerialNum, StartDate, EndDate)
][, .N, by = .(SerialNum, StartDate, EndDate, mnth)]

这会给你:

   SerialNum  StartDate    EndDate  mnth  N
1: 1 2015-01-28 2015-02-03 jan15 4
2: 1 2015-01-28 2015-02-03 feb15 3
3: 2 2015-01-28 2015-03-03 jan15 4
4: 2 2015-01-28 2015-03-03 feb15 28
5: 2 2015-01-28 2015-03-03 mrt15 3

如果 StartDateEndDate 列尚未格式化为日期,您可以使用以下方法将它们转换为日期格式:

input[, `:=` (StartDate = as.Date(StartDate,"%d/%m/%Y"),
EndDate = as.Date(EndDate,"%d/%m/%Y"))]

# or with the 'lubridate' package like @Titolondon used
library(lubridate)
input[, `:=` (StartDate = dmy(StartDate), EndDate = dmy(EndDate))]

使用的数据:

input <- data.table(SerialNum = c(1,2),
StartDate = as.Date(c('28/01/2015','28/01/2015'),"%d/%m/%Y"),
EndDate = as.Date(c('03/02/2015','03/03/2015'),"%d/%m/%Y"))

关于r - 使用 2 个日期获取不同月份的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com