我正在excel中处理一个巨大的数据表,该数据表每天一天30秒有一次数据。 。我需要执行的两列是时间和力量。我被要求以小时为单位查找每日电量。所以我需要从R studio中获取30秒数据中每个小时的平均值。请帮我。我是这个软件的新手。
也是具有时间和功率值的普通Excel工作表。但是时间已经到了dd:mm:yy hh:mm:ss的地步。我需要绘制功率和时间(小时)图。在特定的一天,给出时间,例如8点,9点等
答案 0 :(得分:1)
在基数R中,可以使用tapply
或aggregate
来计算组均值。
首先,一些虚假数据,因为您没有发布。
time
变量是用seq.POSIXt
创建的,从今天开始减去1天(Sys.Date - 1
)到今天结束(Sys.time
),以30秒为增量。
数字变量只是一个高斯随机变量。
set.seed(3224)
time <- seq(as.POSIXct(Sys.Date()) - 3, Sys.time(), by = "30 secs")
dat <- data.frame(time, m_Pm = cumsum(rnorm(length(time))))
现在,从获取小时数开始,然后找到分组均值。
dat$datehour <- format(dat$time, "%Y-%m-%d %H")
tapply(dat$m_Pm, dat$datehour, mean)
#2018-08-12 00 2018-08-12 01 2018-08-12 02 2018-08-12 03 2018-08-12 04
# 0.5159274 8.2868756 24.8056718 26.4107549 27.6064418
#2018-08-12 05 2018-08-12 06 2018-08-12 07 2018-08-12 08
# 33.0096640 42.7479312 40.2468852 41.5313523
agg <- aggregate(m_Pm ~ datehour, dat, mean)
head(agg)
# datehour m_Pm
#1 2018-08-12 00 0.5159274
#2 2018-08-12 01 8.2868756
#3 2018-08-12 02 24.8056718
#4 2018-08-12 03 26.4107549
#5 2018-08-12 04 27.6064418
#6 2018-08-12 05 33.0096640
As for the graph, I will draw a line graph using package `ggplot2`. The x axis is formated with package `scales` function `scale_x_datetime`.
library(ggplot2)
library(scales)
ggplot(agg, aes(x = as.POSIXct(datehour, format = "%Y-%m-%d %H"), y = m_Pm)) +
geom_point() +
geom_line() +
labs(x = "Hour", y = "Mean value") +
scale_x_datetime(labels = date_format("%Y-%m-%d %H"))
答案 1 :(得分:0)
如果发布可重现的数据框,则将大有帮助。无论如何,我只给您一个通用的解决方案...
df <- read.table(header=TRUE, stringsAsFactors=FALSE, text="
date hour temperature
28/12/2013 13:03:01 41.572
28/12/2013 13:08:01 46.059
28/12/2013 13:13:01 48.55
28/12/2013 13:18:01 49.546
28/12/2013 13:23:01 49.546
28/12/2013 13:28:01 49.546
28/12/2013 13:33:01 50.044
28/12/2013 13:38:01 50.542
28/12/2013 13:43:01 50.542
28/12/2013 13:48:01 51.04
28/12/2013 13:53:01 51.538
28/12/2013 13:58:01 51.538
28/12/2013 14:03:01 50.542
28/12/2013 14:08:01 51.04
28/12/2013 14:13:01 51.04
28/12/2013 14:18:01 52.534
28/12/2013 14:23:01 53.031
28/12/2013 14:28:01 53.031
28/12/2013 14:33:01 53.031
28/12/2013 14:38:01 51.538
28/12/2013 14:43:01 53.031
28/12/2013 14:48:01 53.529
28/12/2013 15:01:01 50.77")
means <- aggregate(temperature ~ datehour, df, mean)
# Result:
means
datehour temperature
1 2013-12-28 13:00:00 49.17192
2 2013-12-28 14:00:00 52.23470
3 2013-12-28 15:00:00 50.77000