[英]calculating difference between dates in “12 Years” format
我有一个如下所示的数据框
Un_ID Type Child ID Name DOB Hire_date Tenure
1 AMF 23 ASD,ghu 31-12-2016 14-01-1996 2004
2 GHK 45 dgu,khl 2/6/2010 25-05-1989 1993
3 FGT 65 hhm,mjh 11/10/2016 19-12-1990 1998
4 MHU 76 aaa,scg 11/7/2016 19-10-1993 1998
我正在计算雇用日期到今天之间的差异,但我得到了几年(2004 年)的答案,我想要 15 年,20 年
像下面一样尝试
df$Tenure <- round(as.numeric(difftime(Sys.Date(),df$Hire_date,units = 'weeks')/52.25),0)
我还想将数据框中的一个新列更改为 1,0 中的 T/F 以检查检查是否检查租用日期 > DOB + 20 但出现错误
Error in df$DOB + 17 : non-numeric argument to binary operator
df$Hire_check <- df$Hire_date>df$DOB+17
以下代码对我有用。 你应该能够做类似的事情。
# Today is 2020-09-13
round(as.numeric(difftime(Sys.Date(), as.Date("2004-08-13"), units = "weeks") ) / 52.25, 0)
[1] 16
但是,您的日期很混乱。 as.Date()
函数假定年份在前,除非您为其提供要翻译的格式,因此它从 2020 年减去 14!
lubridate
的函数可以在您执行此操作之前清理您的日期并使其表现更好。 然后,您可以对difftime()
使用类似的方法来确定您的hire_check
。
library(lubridate)
library(dplyr)
df %>%
mutate(DOB = dmy(DOB),
Hire_date = dmy(Hire_date),
Tenure = round(as.numeric(difftime(Sys.Date(), Hire_date, unit = "weeks") / 52.25), 0 ),
Hire_check = round(as.numeric(difftime(Hire_date, DOB, unit = "weeks") / 52.25), 0 ) > 20)
# A tibble: 4 x 8
Un_ID Type Child_ID Name DOB Hire_date Tenure Hire_check
<dbl> <chr> <dbl> <chr> <date> <date> <dbl> <lgl>
1 1 AMF 23 ASD,ghu 2016-12-31 1996-01-14 25 FALSE
2 2 GHK 45 dgu,khl 2010-06-02 1989-05-25 31 FALSE
3 3 FGT 65 hhm,mjh 2016-10-11 1990-12-19 30 FALSE
4 4 MHU 76 aaa,scg 2016-07-11 1993-10-19 27 FALSE
这是基于 OP 示例数据的df
的数据。
df <- structure(list(Un_ID = c(1, 2, 3, 4),
Type = c("AMF", "GHK", "FGT", "MHU"),
Child_ID = c(23, 45, 65, 76),
Name = c("ASD,ghu", "dgu,khl", "hhm,mjh", "aaa,scg"),
DOB = c("31-12-2016", "2/6/2010", "11/10/2016", "11/7/2016"),
Hire_date = c("14-01-1996", "25-05-1989", "19-12-1990", "19-10-1993")),
row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.