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