【发布时间】:2015-05-06 22:29:27
【问题描述】:
我有一个数据集,其中包括以下两列。他们指的是病假。
df <- data.frame(BEGIN_DT = c("04/12/2013", "14/01/2013", "31/12/2012", "24/09/2013", "31/12/2013"),
END_DT = c("04/12/2013", "15/01/2013", "04/01/2013", "27/09/2013", "31/12/2013"))
rownames(df) <- c(16:20)
BEGIN_DT END_DT
16 04/12/2013 04/12/2013
17 14/01/2013 15/01/2013
18 31/12/2012 04/01/2013
19 24/09/2013 27/09/2013
20 31/12/2013 31/12/2013
我要做的是根据 BEGIN_DT 和 END_DT 值制作五个额外的列,(Q1、Q2、Q3、Q4、Total)计算每个季度的病假天数。
例如第 18 行:
BEGIN_DT END_DT Q1 Q2 Q3 Q4 Total
31/12/2012 04/01/2013 4 0 0 1 5
我看过这里,这似乎算总数,但我真的不知道如何将这些分成四等份。
calculating number of days between 2 columns of dates in data frame 2-columns-of-dates-in-data-frame
survey <- data.frame(date=c("2012/07/26","2012/07/25"),tx_start=c("2012/01/01","2012/01/01 "))
survey$date_diff <- as.Date(as.character(survey$date), format="%Y/%m/%d")-
as.Date(as.character(survey$tx_start), format="%Y/%m/%d")
survey
目前,我有以下代码,但它只给了我第一季度的总天数,其余的留空。我正在从结束日期中减去开始日期,但是在过去一周的许多小时之后,我并没有更接近(或者可能更远离)弄清楚如何填充新的季度列。
sick2$Q1 <- if ("/%m/" < 4) {
as.Date(as.character(sick2$END_DT), format="%d/%m/%Y") -
as.Date(as.character(sick2$BEGIN_DT), format="%d/%m/%Y")
} else { "0" }
sick2$Q2 <- if ("/%m/" > 3 & "/%m/" < 7) {
as.Date(as.character(sick2$END_DT), format="%d/%m/%Y") -
as.Date(as.character(sick2$BEGIN_DT), format="%d/%m/%Y")
} else { "0" }
sick2$Q3 <- if ("/%m/" > 6 & "/%m/" < 10) {
as.Date(as.character(sick2$END_DT), format="%d/%m/%Y") -
as.Date(as.character(sick2$BEGIN_DT), format="%d/%m/%Y")
} else { "0" }
sick2$Q4 <- if ("/%m/" > 9) {
as.Date(as.character(sick2$END_DT), format="%d/%m/%Y") -
as.Date(as.character(sick2$BEGIN_DT), format="%d/%m/%Y")
} else { "0" }
无论如何,如果有人至少可以在这里为我指出正确的方向,我会 v.v.v.非常感谢,谢谢,阿德里安。
【问题讨论】:
-
还可以查看
lubridate::quarter- 它可能会有所帮助 -
谢谢大家,现在看看这些