我有以下data.frame:
employee <- c('John Doe','Peter Gynn','Jolie Hope','Peter')
enddate <- c('2010-11-1','2008/3/25','2007-3-14','2007/9/21')
startdate<- c('','20010101','20010504','19990221')
employ.data <- data.frame(employee, enddate, startdate)
我想了解startdate
和enddate
之间的区别。怎么办呢?
答案 0 :(得分:2)
我们可以使用可以采用多种日期格式的library(lubridate)
。在示例中,'enddate'和'startdate'都具有相同的顺序即。 ymd
。
library(lubridate)
employ.data$Diff <- with(employ.data, as.numeric(ymd(enddate)-ymd(startdate)))
employ.data
# employee enddate startdate Diff
#1 John Doe 2010-11-1 NA
#2 Peter Gynn 2008/3/25 20010101 2640
#3 Jolie Hope 2007-3-14 20010504 2140
#4 Peter 2007/9/21 19990221 3134
假设还有其他格式,即01-25-2010
,25/2010/03
,我们可以使用guess_formats
获取可以在parse_date_time
中使用的格式将其转换为'POSIXct'类。
ymd
还有其他功能。如果我们查看ymd
(?ymd
)的帮助页面,
如果'truncated'参数为非零,'ymd'函数也会检查 截断格式。例如,'截断= 2'的'ymd'将 还解析不完整的日期,如'2012-06'和'2012'。
答案 1 :(得分:1)
employ.data$enddate <- as.Date(gsub('/','-',employ.data$enddate));
employ.data$startdate <- as.Date(employ.data$startdate,'%Y%m%d');
employ.data;
## employee enddate startdate
## 1 John Doe 2010-11-01 <NA>
## 2 Peter Gynn 2008-03-25 2001-01-01
## 3 Jolie Hope 2007-03-14 2001-05-04
## 4 Peter 2007-09-21 1999-02-21
employ.data$enddate - employ.data$startdate;
## Time differences in days
## [1] NA 2640 2140 3134