我会将日、月和年添加到数据框中,然后使用aggregate()
。
首先将您的date
列转换为POSIXct对象:
d$timestamp <- as.POSIXct(d$dates,format = "%m/%d/%Y %H:%M",tz ="GMT")
如果您想将日期(例如12/03/2012)放入名为Date
的列中,请尝试以下操作:
d$Date <- format(d$timestamp,"%y-%m-%d",tz = "GMT")
接下来,按日期进行聚合:
aggregate(cbind("temperature.mean" = temperature,
"salinity.mean" = salinity) ~ Date,
data = d,
FUN = mean)
同样地,您可以将月份放入一个列中(我们称之为
M
),然后...
d$M <- format(d$timestamp,"%B",tz = "GMT")
aggregate(cbind("temperature.mean" = temperature,
"salinity.mean" = salinity) ~ M,
data = d,
FUN = mean)
或者如果你需要年-月
d$YM <- format(d$timestamp,"%y-%B",tz = "GMT")
aggregate(cbind("temperature.mean" = temperature,
"salinity.mean" = salinity) ~ YM,
data = d,
FUN = mean)
如果您的数据中存在任何NA值,您可能需要考虑这些问题:
aggregate(cbind("temperature.mean" = temperature,
"salinity.mean" = salinity) ~ YM,
data = d,
function(x) mean(x,na.rm = TRUE))
最后,如果你想按周平均,也可以这样做。首先生成周数,然后再次使用aggregate()
。
d$W <- format(d$timestamp,"%W",tz = "GMT")
aggregate(cbind("temperature.mean" = temperature,
"salinity.mean" = salinity) ~ W,
data = d,
function(x) mean(x,na.rm = TRUE))
这个版本的周数将第一周定义为一年中的第一个星期一。每周从星期一到星期日。