gpt4 book ai didi

返回最接近 R 中给定日期的日期

转载 作者:行者123 更新时间:2023-12-04 17:43:42 25 4
gpt4 key购买 nike

我的数据框由对个体动物的个体观察组成。每只动物都有一个生日,我想将其与日期向量中最接近的野外季节日期相关联。

这是一个非常基本的可重现示例:

ID <- c("a", "b", "c", "d", "a") # individual "a" is measured twice here
birthdate <- as.Date(c("2012-06-12", "2014-06-14", "2015-11-11", "2016-09-30", "2012-06-12"))
df <- data.frame(ID, birthdate)

# This is the date vector
season_enddates <- as.Date(c("2011-11-10", "2012-11-28", "2013-11-29", "2014-11-26", "2015-11-16", "2016-11-22", "2012-06-21", "2013-06-23", "2014-06-25", "2015-06-08", "2016-06-14"))

使用以下代码,我可以获得出生日期和最接近的季节结束日期之间的差异。
for(i in 1:length(df$birthdate)){
df$birthseason[i] <- which(abs(season_enddates-df$birthdate[i]) == min(abs(season_enddates-df$birthdate[i])))
}

但是,我想要的是实际日期,而不是差异。例如,birthseason 的第一个值应该是 2012-06-21。

最佳答案

这有点令人困惑,因为您使用了示例中未包含的变量。

但我认为这就是你想要的:

for (ii in 1:nrow(df))  df$birthseason[ii] <-as.character(season_enddates[which.min(abs(df$birthdate[ii] - season_enddates))])

或者使用 lapply :
df$birthseason <- unlist(lapply(df$birthdate,function(x) as.character(season_enddates[which.min(abs(x - season_enddates))])))

结果:
> df
ID birthdate birthseason
1 a 2012-06-12 2012-06-21
2 b 2014-06-14 2014-06-25
3 c 2015-11-11 2015-11-16
4 d 2016-09-30 2016-11-22
5 a 2012-06-12 2012-06-21

关于返回最接近 R 中给定日期的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081592/

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