gpt4 book ai didi

r - 在 R 中的两个数据框中按组比较日期

转载 作者:行者123 更新时间:2023-12-01 12:07:29 26 4
gpt4 key购买 nike

我有一个包含事件日期的数据框:

data.frame(id = c("a", "a", "a", "d", "d"),
date = as.Date(c("2018-01-03", "2018-02-02", "2018-02-22", "2018-02-13", "2018-05-01")))

id date
1 a 2018-01-03
2 a 2018-02-02
3 a 2018-02-22
4 d 2018-02-13
5 d 2018-05-01

另一个包含 id 的周期开始和结束:

data.frame(id = c("a", "a", "d", "d", "d", "d"),
start = as.Date(c("2018-01-15", "2018-01-30", "2018-03-01", "2018-02-01", "2018-04-02", "2018-03-19")),
end = as.Date(c("2018-01-18", "2018-02-10", "2018-03-03", "2018-04-22", "2018-05-23", "2018-08-29")))

id start end
1 a 2018-01-15 2018-01-18
2 a 2018-01-30 2018-02-10
3 d 2018-03-01 2018-03-03
4 d 2018-02-01 2018-04-22
5 d 2018-04-02 2018-05-23
6 d 2018-03-19 2018-08-29

对于每个 id,我需要计算第一个数据框中的每个日期所属的第二个数据框中的周期数。

我想要的数据框是:

  id       date n
1 a 2018-01-03 0 # does not belong to any period
2 a 2018-02-02 1 # belongs to [2018-01-30,2018-02-10]
3 a 2018-02-22 0 # does not belong to any period
4 d 2018-02-13 1 # belongs to [2018-02-01,2018-04-22]
5 d 2018-05-01 2 # belongs to [2018-04-02,2018-05-23] and [2018-03-19,2018-08-29]

我的问题不是日期比较和结果求和。我的问题是关于在每个 id 组内执行这些分析。我想有一种方法可以使用 split 和/或 apply 系列,但我没有找到方法。

我怎样才能在 base R 中做到这一点?我在限制性环境中工作,我只能访问基础 R。

最佳答案

基础方法

temp <- subset( merge(df1, df2), date >= start & date <= end, select = "date" )
df1$n <- sapply( df1$date, function(x) length( temp$date[ temp$date == x ] ))

# id date n
# 1 a 2018-01-03 0
# 2 a 2018-02-02 1
# 3 a 2018-02-22 0
# 4 d 2018-02-13 1
# 5 d 2018-05-01 2

关于r - 在 R 中的两个数据框中按组比较日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com