Вычитать объекты даты? - PullRequest
       42

Вычитать объекты даты?

0 голосов
/ 14 апреля 2020

Итак, я пытаюсь просто вычесть survey_date из child_date, но продолжаю получать сообщение об ошибке «строка символов не в стандартном однозначном формате». Оба столбца в символьном формате, так в чем же проблема?

Это не работает:

df %>% mutate(child_age = survey_date-child_date)

структура (список (case_id = c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), person_id = c (1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), house_id = c (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6), год = c (2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018 , 2018, 2018, 2018, 2018, 2018, 2018, 2018), месяц = ​​c (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), survey_date_cm c = c (1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417), mom_age = c (28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 37, 37, 37, 37, 37, 37 , 37, 37, 37, 37), mom_dob_cm c = c (1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 973, 973, 973, 973, 973, 973, 973 , 973, 973, 973, 973), name = c ("b3_01", "b3_02", "b3_03", "b3_04", "b3_05", "b3_06", " b3_07 "," b3_08 "," b3_09 "," b3_10 "," b3_01 "," b3_02 "," b3_03 "," b3_04 "," b3_05 "," b3_06 "," b3_07 "," b3_08 "," b3_09 " , "b3_10"), значение = c (NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1297, 1297, NA, NA, NA, NA, NA, NA, NA, NA), child_date = c (NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "2008-01-01", "2008-01-01", NA, NA, NA , NA, NA, NA, NA, NA), survey_date = c ("2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018 -01-01 "," 2018-01-01 "," 2018-01-01 "," 2018-01-01 "," 2018-01-01 "," 2018-01-01 "," 2018-01 -01 "," 2018-01-01 "," 2018-01-01 "," 2018-01-01 ")), класс = c (" grouped_df "," tbl_df "," tbl "," data .frame "), row.names = c (NA, -20L), groups = структура (список (mom_age = c (28, 37), case_id = 1: 2, .rows = список (1:10) , 11:20)), row.names = c (NA, -2L), класс = c ("tbl_df", "tbl", "data.frame"), .drop = TRUE))

Data Frame

1 Ответ

2 голосов
/ 14 апреля 2020

Столбцы character класса. Он должен быть конвертирован

library(dplyr)
df %>% 
   mutate(child_age = as.Date(survey_date) - as.Date(child_date))

. Для лучшего контроля с unit s можно использовать difftime

df %>%
   mutate(child_age = difftime(as.Date(child_date), as.Date(survey_date), unit = 'weeks'))

или interval из lubridate

lubridate)
df %>% 
     mutate(child_age = interval( as.Date(child_date), as.Date(survey_date))/years(1))
...