Вычисление количества дней между двумя столбцами дат в кадре данных
У меня есть кадр данных, который имеет два столбца дат в формате yyyy/mm/dd.
Я пытаюсь рассчитать количество дней между этими двумя датами для каждого наблюдения в кадре данных (и создать новую переменную с этим количеством дней в ней).
До сих пор я пытался использовать приведенный здесь ответ:
Рассчитать количество дней недели между двумя датами в R
но редактируя код так, чтобы он вычислял количество общих дней, а не только количество недельных дней. Это просто придумал ошибку:
Error in del/by : non-numeric argument to binary operator
In addition: Warning message:
In Ops.factor(to, from) : - not meaningful for factors
Я также попытался использовать этот код:
finish <- as.Date(survey$date, format="%yyyy/%mm/%dd")
start <- as.Date(survey$tx_start, format="%yyyy/%mm/%dd")
date_diff<-as.data.frame(finish-start)
с планом использования "cbind" или что-то эквивалентное, чтобы объединить фрейм данных "дни" с моим "фреймворком данных", в котором есть данные.
Хотя это не дает мне никаких ошибок, наблюдения в объектах "финиш" и "старт" - это "NA_real_", поэтому в кадре данных date_diff есть все наблюдения, перечисленные как NA.
Если кто-то может указать мне в правильном направлении, это было бы здорово! Весь другой вопрос, который я нашел, по-видимому, не связан с датами внутри переменных, а как отдельные даты, и применение этих методов к переменным не работает для меня.
Заранее спасибо
Ответы
Ответ 1
Без просмотра ваших данных (вы можете использовать вывод dput(head(survey))
, чтобы показать нам) это выстрел в темноте:
survey <- data.frame(date=c("2012/07/26","2012/07/25"),tx_start=c("2012/01/01","2012/01/01"))
survey$date_diff <- as.Date(as.character(survey$date), format="%Y/%m/%d")-
as.Date(as.character(survey$tx_start), format="%Y/%m/%d")
survey
date tx_start date_diff
1 2012/07/26 2012/01/01 207 days
2 2012/07/25 2012/01/01 206 days
Ответ 2
Вы можете найти разницу между датами в столбцах в кадре данных с помощью функции difftime
следующим образом:
df$diff_in_days<- difftime(df$datevar1 ,df$datevar2 , units = c("days"))
Ответ 3
Вы должны правильно использовать форматы as.Date.
Eg.
x = '2012/07/25'
xd = as.Date(x,'%Y/%m/%d')
xd # Prints "2012-07-25"
R форматы даты аналогичны * nix.
Выполнение
TypeOf (XD)
показывает его как двойное, т.е. дней с 1970 года.