我正在尝试计算每个因素水平的独立年份的平均日期。
DF <- data.frame(Date = seq(as.Date("2013-2-15"), by = "day", length.out = 730))
DF$ID = rep(c("AAA", "BBB", "CCC"), length.out = 730)
head(DF)
Date ID
1 2013-02-15 AAA
2 2013-02-16 BBB
3 2013-02-17 CCC
4 2013-02-18 AAA
5 2013-02-19 BBB
6 2013-02-20 CCC
根据上面的数据和下面的代码,我可以计算每个因素的平均日期,但这包括年份。
我想要多年的平均月份和日期。优选的结果是格式为月 - 日的POSIXct
时间类(例如12月31日的12-31),表示多年的平均月和日。
library(dplyr)
DF2 <- DF %>% group_by(ID) %>% mutate(
Col = mean(Date, na.rm = T))
DF2
加成 我正在寻找一年中的平均日,其中包含每个因子级别的月和日组件。例如,如果日期代表动物复制的日期,我对年份之间的年度差异不感兴趣,而是想要一个平均日。
I最终结果看起来像DF2
但是使用前面描述的新值计算(一年中平均值为一天的组件。
对不起,这不是更清楚。
答案 0 :(得分:3)
如果我正确理解您的问题,请点击此处了解如何获取平均日期列。我首先使用yday
中的POSIXlt
提取一年中的某一天。然后我计算mean
。要获取日期,我必须将这些日期添加到实际年份,因此创建Year
对象。根据要求,我在结果中将结果与DF2的格式相同。
library(dplyr)
DF2 <- DF %>%
mutate(Year=format(Date,"%Y"),
Date_day=as.POSIXlt(Date, origin = "1960-01-01")$yday)%>%
group_by(ID) %>%
mutate(Col = mean(Date_day, na.rm = T),Mean_date=format(as.Date(paste0(Year,"-01-01"))+Col,"%m-%d"))%>%
select(Date,ID,Mean_date)
DF2
> DF2
Source: local data frame [730 x 3]
Groups: ID [3]
Date ID Mean_date
(date) (chr) (chr)
1 2013-02-15 AAA 07-02
2 2013-02-16 BBB 07-02
3 2013-02-17 CCC 07-01
4 2013-02-18 AAA 07-02
5 2013-02-19 BBB 07-02
6 2013-02-20 CCC 07-01
7 2013-02-21 AAA 07-02
8 2013-02-22 BBB 07-02
9 2013-02-23 CCC 07-01
10 2013-02-24 AAA 07-02
.. ... ... ...
答案 1 :(得分:0)
您可以使用均值函数获取日期的均值。但是,请注意,根据数据类型,平均实现(和结果)将有所不同。对于POSIXct,将计算平均值并返回日期和时间-考虑采用一堆整数的平均值,您可能会得到浮点数或数字。对于日期,它实际上会将日期“舍入”到最接近的日期。
例如,我最近对日期进行了平均。查看使用不同数据类型时的输出。
> mean(as.Date(stationPointDf$knockInDate))
[1] "2018-06-04"
> mean(as.POSIXct(stationPointDf$knockInDate))
[1] "2018-06-03 21:19:21 CDT"
如果我要查找跨年的平均月和日,则可以使用lubridate软件包将所有日期转换为具有当年的年份。
library(lubridate)
year(myVectorOfDates) <- 2018
然后,我计算平均值并减去年份。