【问题标题】:Calculate date differences with a loop or lapply?使用循环或 lapply 计算日期差异?
【发布时间】:2022-02-12 05:27:00
【问题描述】:

这是我数据集中的快照。这是我的分析目标。

  1. 我想过滤我的数据集以获取 sic 代码
  2. 我想计算两个日期之间的差异,并将其放入数据集中
sic | Announcement_date
---  -------------------
13  | 2018-09-11
19  | 2014-06-11
92  | 2011-10-14
131 | 2010-07-02
131 | 2011-02-16
131 | 2011-10-12

所以对于这个例子,我的预期输出是:

sic | Announcement_date  | Difference
---  -------------------  ------------
13  | 2018-09-11          NA
19  | 2014-06-11          NA
92  | 2011-10-14          NA
131 | 2010-07-02          NA
131 | 2011-02-16          229 days
131 | 2011-10-12          #etc...

由于我对 R 比较陌生,我不知道如何实现这一点。有人可以帮帮我吗?

非常感谢您的支持。

【问题讨论】:

  • 你的例子不是很清楚。 sic #131 出现了 3 次,但你只是减去了前两次。第三个呢,我们应该忽略它吗?

标签: r loops date lapply


【解决方案1】:

确保您的日期采用POSIXct 格式,然后您可以使用diff 来获取日期之间的差异。只需group_by(sic),并确保在每个组的开头添加一个额外的NA,因为没有什么可以与diff 中的第一个条目进行比较

library(dplyr)

df %>%
  mutate(Announcement_date = as.POSIXct(Announcement_date)) %>%
  group_by(sic) %>%
  mutate(difference = c(NA, diff(Announcement_date)))
#> # A tibble: 6 x 3
#> # Groups:   sic [4]
#>     sic Announcement_date   difference
#>   <int> <dttm>                   <dbl>
#> 1    13 2018-09-11 00:00:00         NA
#> 2    19 2014-06-11 00:00:00         NA
#> 3    92 2011-10-14 00:00:00         NA
#> 4   131 2010-07-02 00:00:00         NA
#> 5   131 2011-02-16 00:00:00        229
#> 6   131 2011-10-12 00:00:00        238

数据

df <- structure(list(sic = c(13L, 19L, 92L, 131L, 131L, 131L), 
               Announcement_date = c("2018-09-11", 
"2014-06-11", "2011-10-14", "2010-07-02", "2011-02-16", "2011-10-12"
)), class = "data.frame", row.names = c(NA, -6L))

reprex package (v2.0.1) 于 2022-02-11 创建

【讨论】:

  • 非常感谢!!!这非常有效 - 非常感谢!
猜你喜欢
  • 2021-01-05
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多