如何从R中的平均小时数(从30秒数据表)中获取数据

时间:2018-08-09 06:27:02

标签: r

我正在excel中处理一个巨大的数据表,该数据表每天一天30秒有一次数据。 。我需要执行的两列是时间和力量。我被要求以小时为单位查找每日电量。所以我需要从R studio中获取30秒数据中每个小时的平均值。请帮我。我是这个软件的新手。

也是具有时间和功率值的普通Excel工作表。但是时间已经到了dd:mm:yy hh:mm:ss的地步。我需要绘制功率和时间(小时)图。在特定的一天,给出时间,例如8点,9点等

2 个答案:

答案 0 :(得分:1)

在基数R中,可以使用tapplyaggregate来计算组均值。

首先,一些虚假数据,因为您没有发布。
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"))

enter image description here

答案 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

enter image description here