我有一个数据框,由不同列中每个系统的34个不同系统的日期和温度组成。我需要计算每个系统的平均每小时温度。我使用此代码计算1个系统的平均值。但如果我想计算其他33个系统的平均值,我必须再次重复代码。是否有更好的方法可以同时在所有列中找到每小时平均值?
dat$ut_ms <- dat$ut_ms/1000
dat[ ,1]<- as.POSIXct(dat[,1], origin="1970-01-01")
dat$ut_ms <- strptime(dat$ut_ms, "%Y-%m-%d %H:%M")
dat$ut_ms <- cut(dat[enter image description here][1]$ut_ms, breaks = 'hour')
meanNPWD2401<- aggregate(NPWD2401 ~ ut_ms, dat, mean)
我添加了数据图片。为了更好地理解我想要的东西。
答案 0 :(得分:0)
您可以每小时拆分数据并进行迭代,
list1 <- split(dat, cut(strptime(dat$ut_ms, format = '%Y-%m-%d %H:%M'), 'hour'))
lapply(list1, colMeans)
答案 1 :(得分:0)
当您将数据重新排列为长格式时,事情变得更加容易
n.system <- 34
n.time <- 100
temp <- rnorm(n.time * n.system)
temp <- matrix(temp, ncol = n.system)
seconds <- runif(n.time, max = 3 * 3600)
time <- as.POSIXct(seconds, origin = "1970-01-01")
dataset <- data.frame(time, temp)
library(dplyr)
library(tidyr)
dataset %>%
gather(key = "system", value = "temperature", -time) %>%
mutate(hour = cut(time, "hour")) %>%
group_by(system, hour) %>%
summarise(average = mean(temperature))