当前位置: 首页 > 知识库问答 >
问题:

计算每个组中自上一日期以来经过的天数

松阳泽
2023-03-14

我的数据如下:

data <- structure(list(year = c(2019L, 2019L, 2019L, 2019L, 2019L, 2020L, 
2020L, 2020L, 2020L, 2020L), group = c("A", "A", "A", "B", "B", 
"A", "A", "B", "B", "B"), date = c("2019-07-15", "2019-07-25", 
"2019-08-01", "2019-07-15", "2019-07-30", "2020-08-01", "2020-08-03", 
"2020-08-01", "2020-08-20", "2020-08-25")), 
class = "data.frame", row.names = c(NA, 
-10L))

我想计算每个小组自上一个日期以来每年经过的天数。当我尝试这样做时,输出不是对数据进行分组。例如,输出会将组 B 2019-07-15 和组 A 2019-08-21 之间的天数计算为负值,而不是计算自每个日期 WITHIN 组以来经过的天数。

我尝试了以下代码,这导致了我在上面描述的问题:

library(dplyr)
data %>%
 arrange(year, group, date) %>%  # To ensure dates are in chronological order within each group 
 mutate(date = as.Date(date)) %>%
 group_by(year, group)%>% 
 mutate(Difference = difftime(date, lag(date), units = "days")) 

提前谢谢!

共有2个答案

水铭晨
2023-03-14

以下是使用< code>lubridate包中的< code>interval函数的替代方法:

注:

interval(lag(date,default = date[1]), date) %>% 
           as.numeric('days')

法典:

library(lubridate)
library(dplyr)
data %>% 
  mutate(date = ymd(date)) %>% 
  group_by(group) %>% 
  mutate(difference = interval(lag(date,default = date[1]), date) %>% as.numeric('days'))  
    year group date       difference
   <int> <chr> <date>          <dbl>
 1  2019 A     2019-07-15          0
 2  2019 A     2019-07-25         10
 3  2019 A     2019-08-01          7
 4  2019 B     2019-07-15          0
 5  2019 B     2019-07-30         15
 6  2020 A     2020-08-01        366
 7  2020 A     2020-08-03          2
 8  2020 B     2020-08-01        368
 9  2020 B     2020-08-20         19
10  2020 B     2020-08-25          5
颛孙星海
2023-03-14

尝试以下操作。对代码的微小更改会产生影响。

suppressPackageStartupMessages(library(dplyr))

data %>%
  mutate(date = as.Date(date)) %>%
  group_by(group)%>% 
  arrange(group, date) %>% 
  mutate(Difference = difftime(date, lag(date), units = "days")) 
#> # A tibble: 10 × 4
#> # Groups:   group [2]
#>     year group date       Difference
#>    <int> <chr> <date>     <drtn>    
#>  1  2019 A     2019-07-15  NA days  
#>  2  2019 A     2019-07-25  10 days  
#>  3  2019 A     2019-08-01   7 days  
#>  4  2020 A     2020-08-01 366 days  
#>  5  2020 A     2020-08-03   2 days  
#>  6  2019 B     2019-07-15  NA days  
#>  7  2019 B     2019-07-30  15 days  
#>  8  2020 B     2020-08-01 368 days  
#>  9  2020 B     2020-08-20  19 days  
#> 10  2020 B     2020-08-25   5 days

< sup >由reprex软件包(v2.0.1)于2022-06-10创建

 类似资料:
  • 我的数据如下: 我想计算每个组每年日期之间的平均天数。我尝试了以下代码,但收到以下错误: 我的日期列的类别是日期。

  • 问题 你需要找出两个日期间隔了几年,几个月,几天,几个小时,几分钟,几秒。 解决方案 利用 JavaScript 的日期计算函数 getTime() 。它提供了从 1970 年 1 月 1 日开始经过了多少毫秒。 DAY = 1000 * 60 * 60 * 24 d1 = new Date('02/01/2011') d2 = new Date('02/06/2011') days_pas

  • 我需要计算JPA中2个日期之间的天数。 例如: 到目前为止,我试着: 你会怎么做?

  • 我试图计算可能的成对数,这可以通过从两个集合中获取值来实现。没有人停下来Rest。我还尝试使用JavaSet实现它。但我陷入了逻辑,如何计算这种可能的组合。 问题示例: 这里,可能的对组合是 [0,2] , [0,3] , [1,2] , [1,3] , [4,2] , [4,3] 代码如下: 输入可能在某个级别上有所不同,如下所示 这里,可能的对组合是[0,1]、[0,3]、[2,1]、[2,3

  • 我有以下数据帧(示例): 我想创建一个名为“斜率”的列,它显示每组每n(n=3)天的斜率。这意味着当第一个日期是“2022-09-01”和3天后用于计算时。斜率可以使用“diff_days”(通过与每组第一个值的差异计算)和“值”列来计算。以下是所需的输出: 以下是一些示例计算,可为您提供一个想法: A组前3天:斜率([0,1,3],[2,1,3])=0.43 A组3天后:斜率([5,6,6],[

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时