Месяцы представляются в виде одинарного ди git месяца, нам нужно изменить его на двойное ди git, добавив ноль. Один из способов сделать это - использовать sprintf
, после чего мы конвертируем данные в даты и вычитаем их.
df <- read.table("http://lib.stat.cmu.edu/datasets/csb/ch14.dat")
df$Diff_in_days <- as.Date(sprintf("%06d", df$V15), "%m%d%y") -
as.Date(sprintf("%06d", df$V2), "%m%d%y")
head(df[15:20])
# V15 V16 V17 V18 V19 Diff_in_days
#1 72984 D N . Y 6 days
#2 82184 D N . Y 33 days
#3 82585 D N . Y 361 days
#4 10286 D N . Y 488 days
#5 111485 D N . Y 350 days
#6 112686 D N . Y 721 days
Вы можете захотеть обернуть as.numeric
, чтобы получить действительные числа в Diff_in_days
.
Другой вариант - использовать функцию lubridate
s mdy
, которая обрабатывает это автоматически.
library(lubridate)
df$Diff_in_days <- mdy(df$V15) - mdy(df$V2)