r - 减去日期对象?
问题描述
所以我试图简单地从 child_date 中减去survey_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), home_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_cmc = c(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_cmc = c(1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 973, 973, 973, 973 , 973, 973, 973, 973, 973, 973),名称 = 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,1297,1297,NA,NA,NA,NA,NA,NA,NA,NA),child_date = c(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 = structure(list( mom_age = c(28, 37), case_id = 1 :2, .rows = list(1:10, 11:20)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"), .下降=真))"2018-01-01", "2018-01-01")), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, - 20L),groups = structure(list( mom_age = c(28, 37), case_id = 1:2, .rows = list(1:10, 11:20)), row.names = c(NA, -2L) , 类 = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))"2018-01-01", "2018-01-01")), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, - 20L),groups = structure(list( mom_age = c(28, 37), case_id = 1:2, .rows = list(1:10, 11:20)), row.names = c(NA, -2L) , 类 = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))
解决方案
列是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
fromlubridate
lubridate)
df %>%
mutate(child_age = interval( as.Date(child_date), as.Date(survey_date))/years(1))
推荐阅读
- javascript - JS 计算器,结果未按预期显示?
- jsf - JSF 的 SelectItems 的 itemLabel 即使使用不正确的 var ref 也能工作
- blazor-webassembly - 找不到 BlazorWebAssembly JS 文件。这通常表示打包错误
- sql - BigQuery - 连接谓词中的表不受支持的子查询
- python - 如何在 C++ proejct 中嵌入二进制化的 python 包
- postgresql - 错误:(repmgr)服务器处于待机模式,无法注册为主服务器
- reactjs - Storybook:如何测试基于路线的动画?
- frontend - 试图分叉 pancakeswap 前端彩票页面。获取多路通话卡盘失败
- android - 颤振 apk 问题
- docker - 在 gitlab 管道中运行 oracle 映像