Подтвердить что ты не робот

Вычисление количества дней между двумя столбцами дат в кадре данных

У меня есть кадр данных, который имеет два столбца дат в формате 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.

Если кто-то может указать мне в правильном направлении, это было бы здорово! Весь другой вопрос, который я нашел, по-видимому, не связан с датами внутри переменных, а как отдельные даты, и применение этих методов к переменным не работает для меня.

Заранее спасибо

4b9b3361

Ответ 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 года.