gpt4 book ai didi

r - 根据缺失行的宽数据计算出的时间差

转载 作者:行者123 更新时间:2023-12-02 02:43:23 29 4
gpt4 key购买 nike

有一个宽格式的纵向数据集,我想从中计算第一次观察日期和最后一次观察个体的日期之间的时间(以年和日为单位)。日期的格式为 yyyy-mm-dd。数据集有四个缺失日期的观察期,示例如下

df1<-data.frame("id"=c(1:4),
"adate"=c("2011-06-18","2011-06-18","2011-04-09","2011-05-20"),
"bdate"=c("2012-06-15","2012-06-15",NA,"2012-05-23"),
"cdate"=c("2013-06-18","2013-06-18","2013-04-09",NA),
"ddate"=c("2014-06-15",NA,"2014-04-11",NA))

这里的“adate”是第一个日期,最后一个日期是最后一次见到某人的日期。为了计算时间差(lastdate-adate),我尝试使用“lubridate”包,例如

lubridate::time_length(difftime(as.Date("2012-05-23"), as.Date("2011-05-20")),"years") 

但是,我面临的挑战是最后一个日期不是来自某一列。我正在寻找一种在 R 中自动计算的方法。预期的输出如下所示

  id years days
1 1 2.99 1093
2 2 2.00 731
3 3 3.01 1098
4 4 1.01 369

年份近似为小数点后 2 位。

最佳答案

另一个 tidyverse 解决方案可以通过将数据转换为长格式、删除 NA 日期并获取每个 最后一个日期和第一个日期之间的时间差来完成id.

library(dplyr)
library(tidyr)
library(lubridate)
df1 %>% 
pivot_longer(-id) %>%
na.omit %>%
group_by(id) %>%
mutate(value = as.Date(value)) %>%
summarise(years = time_length(difftime(last(value), first(value)),"years"),
days = as.numeric(difftime(last(value), first(value))))
#> # A tibble: 4 x 3
#> id years days
#> <int> <dbl> <dbl>
#> 1 1 2.99 1093
#> 2 2 2.00 731
#> 3 3 3.01 1098
#> 4 4 1.01 369

关于r - 根据缺失行的宽数据计算出的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63199681/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com