library(plyr)
library(dplyr)
library(lubridate)
d.in <- read.csv("C:/Users/Person/Documents/dataset.csv")
d.in <- mutate(d.in, dob=mdy(dob))
summary(d.in$dob)
d.in <- mutate(d.in, dob = mdy(dob), hosp_admission = mdy(hosp_admission))
d.in <- mutate(d.in, age_at_admission =
interval(dob,hosp_admission)/dyears(1))使用此代码,我得到以下消息:警告消息:所有格式都无法解析。找不到格式。
此外,它还改变了我所有的出生日期和年龄,进入N/A。
发布于 2020-07-20 05:20:23
对于我来说,这似乎是使用另一个答案中的示例数据的最直接的方法:
d.in <- data.frame(
dob = c("01-30-1978", "02-10-1960", "03-04-1990"),
hosp_admission = c("12-20-2015", "06-15-2000", "07-06-2017"))
d.in %>%
mutate(
dob = mdy(dob),
hosp_admission = mdy(hosp_admission),
age = year(hosp_admission) - year(dob))
dob hosp_admission age
1 1978-01-30 2015-12-20 37
2 1960-02-10 2000-06-15 40
3 1990-03-04 2017-07-06 27发布于 2018-06-26 21:04:41
在lubridate中,我们可以将decimal_year与floor一起使用
# Generate some sample data
d.in <- data.frame(
dob = c("01-30-1978", "02-10-1960", "03-04-1990"),
hosp_admission = c("12-20-2015", "06-15-2000", "07-06-2017"))
library(lubridate);
library(tidyverse);
d.in %>%
mutate(
dob = mdy(dob),
hosp_admission = mdy(hosp_admission),
age = floor(decimal_date(hosp_admission) - decimal_date(dob)))
# dob hosp_admission age
#1 1978-01-30 2015-12-20 37
#2 1960-02-10 2000-06-15 40
#3 1990-03-04 2017-07-06 27发布于 2018-06-26 20:39:02
不确定是否需要使用lubridate,但MESS包中的函数age会计算两个日期之间的年龄(以年为单位):
born <- c("1971-08-18", "2000-02-28", "2001-12-20")
check <- c("2018-06-26")
MESS::age(born, check)它会返回
[1] 46 16 14https://stackoverflow.com/questions/51042169
复制相似问题