按年提取天数,开始日期和结束日期可能跨年也可能不跨年
Extract number of days by year with beginning and end dates that may or may not span years
您好,我正在尝试将天数提取到变量中 Days2010:Days2015。开始日期和结束日期可能跨越一年或更长时间。
df <- data.frame(BEGIN_DT = c("12/12/2013", "01/14/2013", "02/12/2012", "09/23/2013", "10/18/2013"),
END_DT = c("09/04/2015", "06/01/2013", "04/01/2013", "11/09/2015", "11/12/2014"))
rownames(df) <- c(16:20)
df$BEGIN_DT <- as.Date(df$BEGIN_DT, "%m/%d/%Y")
df$END_DT <- as.Date(df$END_DT, "%m/%d/%Y")
`BEGIN_DT END_DT
16 2013-12-12 2015-09-04
17 2013-01-14 2013-06-01
18 2012-02-12 2013-04-01
19 2013-09-23 2015-11-09
20 2013-10-18 2014-11-12`
So, for row 16, I would end up with
Days2012 = 19;
Days2013 = 365;
Days2014 = 365;
Days2015 = 246.
提前致谢!
这是一个解决方案,假设您在 df
中有东西:
apply(df, 1, function(x) {
dates <- seq.Date(as.Date(x[1]), as.Date(x[2]), by = 'days')
table(format(dates, '%Y'))
}
)
你遍历每一行,创建一个日期序列,提取年份并进行交叉表。这为您提供了列表格式。您可以修改输出格式以满足您的需要。
假设您将上述输出保存到名为 l
:
的列表中,您可以按如下方式将其放入数据框中
maxLength <- max(sapply(l, length))
as.data.frame(t(sapply(l, function(x)
c(x, rep(NA, maxLength - length(x)))
)
)
)
2013 2014 2015
16 20 365 247
17 139 NA NA
18 324 91 NA
19 100 365 313
20 75 316 NA
您好,我正在尝试将天数提取到变量中 Days2010:Days2015。开始日期和结束日期可能跨越一年或更长时间。
df <- data.frame(BEGIN_DT = c("12/12/2013", "01/14/2013", "02/12/2012", "09/23/2013", "10/18/2013"),
END_DT = c("09/04/2015", "06/01/2013", "04/01/2013", "11/09/2015", "11/12/2014"))
rownames(df) <- c(16:20)
df$BEGIN_DT <- as.Date(df$BEGIN_DT, "%m/%d/%Y")
df$END_DT <- as.Date(df$END_DT, "%m/%d/%Y")
`BEGIN_DT END_DT
16 2013-12-12 2015-09-04
17 2013-01-14 2013-06-01
18 2012-02-12 2013-04-01
19 2013-09-23 2015-11-09
20 2013-10-18 2014-11-12`
So, for row 16, I would end up with
Days2012 = 19;
Days2013 = 365;
Days2014 = 365;
Days2015 = 246.
提前致谢!
这是一个解决方案,假设您在 df
中有东西:
apply(df, 1, function(x) {
dates <- seq.Date(as.Date(x[1]), as.Date(x[2]), by = 'days')
table(format(dates, '%Y'))
}
)
你遍历每一行,创建一个日期序列,提取年份并进行交叉表。这为您提供了列表格式。您可以修改输出格式以满足您的需要。
假设您将上述输出保存到名为 l
:
maxLength <- max(sapply(l, length))
as.data.frame(t(sapply(l, function(x)
c(x, rep(NA, maxLength - length(x)))
)
)
)
2013 2014 2015
16 20 365 247
17 139 NA NA
18 324 91 NA
19 100 365 313
20 75 316 NA