如何为时间段设置序列范围

时间:2018-07-14 11:55:34

标签: r

我的任期为任期,我需要使用顺序在范围上进行划分。

DF

Tenure

3y 11m 30d 0H 0M 0S
7y 3m 30d 0H 0M 0S
6y 5m 30d 0H 0M 0S
8y 11m 30d 0H 0M 0S
7y 11m 30d 0H 0M 0S

我需要使用seq(3,9,by=1.5)

来将上述范围转换为范围
Tenure
(3,4.5]
(6,7.5]
(6,7.5]
(7.5,9]
(7.5,9]

我在R中使用了下面的代码。它正在工作,但是有些显示错误信息的方式,有些还给出了NA,这对我来说很奇怪。

DF$Tenure<-cut(DF$Tenure@year,breaks=seq(3,9,by=1.5),right=TRUE)

1 个答案:

答案 0 :(得分:0)

您首先需要考虑将Tenure中的period/duration转换为yearsTenure成立后,您可以申请cut来创建因子。

使用lubridate的选项可以是:

library(lubridate)

df$Tenure <- cut(as.numeric(period(df$Tenure),unit="years"), seq(3,9,by=1.5))

df
#    Tenure
# 1 (3,4.5]
# 2 (6,7.5]
# 3 (6,7.5]
# 4 (7.5,9]
# 5 (7.5,9]

注意:

as.numeric(period(df$Tenure),unit="years")将数据从3y 11m 30d 0H 0M 0S格式转换为绝对数字年份(例如3.998802年)格式。

数据:

df <- read.table(text = 
"Tenure
'3y 11m 30d 0H 0M 0S'
'7y 3m 30d 0H 0M 0S'
'6y 5m 30d 0H 0M 0S'
'8y 11m 30d 0H 0M 0S'
'7y 11m 30d 0H 0M 0S'",
header = TRUE, stringsAsFactors = FALSE)