在数据框中查找日期间隔,并合理地在 R 中进行中断或重叠

问题描述 投票:0回答:1

我正在寻找一种方法来查找可能存在日期中断或日期重叠的日期间隔的总和。具体来说,在这种情况下,我想知道一个人拥有一辆车多长时间(年数总和),但他们可能一次拥有两辆车(我不希望计数加倍)或者他们可能拥有他们没有汽车的休息。

这是一些示例数据:

person <- c("Layla", "Layla", "Layla", "John", "John", "John", "Bo", "Bo")
car <- c("Volvo x", "Volvo y", "Fiat Q", "Tesla C", "Mazda H", "Ford W", "Honda 1", 
"Honda 2")
from_date <- c(2000, 2009, 2011, 2000, 2004, 2008, 2001, 2003)
end_date <- c(2010, 2012, 2015, 2002, 2020, 2010, 2020, 2019)

data <- data.frame(person, car, from_date, end_date)

这样

       person  car         from_date end_date
    1  Layla   Volvo x     2000      2010
    2  Layla   Volvo y     2009      2012
    3  Layla   Fiat Q      2011      2015
    4   John   Tesla C     2000      2002
    5   John   Mazda H     2004      2020
    6   John   Ford W      2008      2010
    7     Bo   Honda 1     2001      2020
    8     Bo   Honda 2     2003      2019

我想要的结果:

Person carowner_yearsum
Layla   15
John    18
Bo      19

PS:我的问题与此类似:r 中数据帧中的重叠间隔,但基因组排列程序与 R 4.3.1 不兼容

r dataframe overlap dateinterval
1个回答
0
投票

这是一个

data.table
的方法。首先
expand the data ranges into long form
,然后计算每个人的独特年份。

library(data.table)
setDT(data)
data[
    ,
    .(year = seq(from_date, end_date - 1)),
    .(person, car)
][
    ,
    .(
        carowner_yearsum = uniqueN(year)
    ),
    person
]

#    person carowner_yearsum
#    <char>            <int>
# 1:  Layla               15
# 2:   John               18
# 3:     Bo               19
© www.soinside.com 2019 - 2024. All rights reserved.