在R中创建Tenure列

时间:2017-12-12 21:30:27

标签: r

我需要在我当前的数据框架中创建一个新列,其格式如下所示。

Reg         Canceled
20161107    20171102
20120607    20131216 
20110105    20130524

新列的标题为Tenure,它应该保持Canceled列中的日期与Reg列中的日期之间的差异。

Reg          Canceled      Tenure
20161107    20171102         12
20120607    20130607         12
20110105    20110505          4

2 个答案:

答案 0 :(得分:3)

借用 Number of months between two dates

101110011000100011 to 
001011011000100011

答案 1 :(得分:0)

我建议

Reg <- c(       
"20161107",    
"20120607",    
"20110105"  
)
Canceled <- c(
  "20171102",
  "20131216" ,
  "20130524"
)
df <- data.frame(Reg=Reg, Canceled=Canceled)
parsed_reg <- gsub("([0-9]{4})([0-9]{2})([0-9]{2})", "\\1-\\2-\\3", df$Reg)
split_reg <- strsplit(parsed_reg, "-")
dates_reg <- t(data.frame(split_reg))
dates_reg <- data.frame(apply(dates_reg, 2, as.integer))
parsed_can <- gsub("([0-9]{4})([0-9]{2})([0-9]{2})", "\\1-\\2-\\3", df$Canceled)
split_can <- strsplit(parsed_can, "-")
dates_can <- t(data.frame(split_can))
dates_can <- data.frame(apply(dates_can, 2, as.integer))
colnames(dates_reg) <- c("year", "month", "day")
colnames(dates_can) <- c("year", "month", "day")

df$tenure <- (dates_can$year-dates_reg$year)*12 + (dates_can$month-dates_reg$month)