【问题标题】:R get the difference between two set date on the same row in a data frameR获取数据框中同一行的两个设置日期之间的差异
【发布时间】:2019-07-17 14:54:43
【问题描述】:

我正在尝试编写一个代码来获取同一行中两个日期的月差。这个想法是获得一个组的结束日期与另一组的开始日期的差异。

这是我的数据框:

ID  Groups  Date
110     2   17/03/2012
110     2   29/03/2013
110     3   16/08/2013
110     3   05/02/2014
110     5   25/09/2014
110     5   26/11/2014

我想实现这样的目标:

ID  Months
110     4       
110     7

【问题讨论】:

  • two dates on the same row 不清楚。示例中每行只有一个日期
  • @akrun,现在改的标题可以了吗?
  • 你是如何计算月份的,即你用哪些日期的差来得到 t5 和 7
  • 请只使用相关的标签。您没有为您的问题添加任何代码,但坚持使用tidyverse 对其进行标记。该标签仅适用于使用多个tidyverse 包的问题。
  • 类似df1 %>% mutate(Date = dmy(Date), DateN = lead(Date)) %>% group_by(ID, Groups) %>% summarise(Date1 = first(DateN), Date2 = last(DateN)) %>% na.omit %>% transmute(Months = as.numeric(interval(Date1, Date2) %/% months(1)))

标签: r lubridate


【解决方案1】:

一个选项是将“日期”转换为Date 类,然后将“日期”的lead 创建为一个新列,按“ID”、“组”、summarise 分组以获取interval firstlast 元素之间的区别 lead

library(dplyr)
library(lubridate)
df1 %>%
   mutate(Date =lead(dmy(Date))) %>% 
   group_by(ID, Groups) %>% 
   summarise(Date1 = first(Date), Date2 = last(Date)) %>%
   na.omit %>%
   transmute(Months = as.numeric(interval(Date1, Date2) %/% months(1)))
# A tibble: 2 x 2
# Groups:   ID [1]
#     ID Months
#  <int>  <dbl>
#1   110      4
#2   110      7

数据

df1 <- structure(list(ID = c(110L, 110L, 110L, 110L, 110L, 110L), Groups = c(2L, 
2L, 3L, 3L, 5L, 5L), Date = c("17/03/2012", "29/03/2013", "16/08/2013", 
"05/02/2014", "25/09/2014", "26/11/2014")), class = "data.frame", row.names = c(NA, 
-6L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2017-03-27
    • 2017-03-16
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多