r - 按日期计算 data.frame 列平均值

标签 r loops for-loop dataframe average

我在 R 中有一个 data.frame,其中一列是日期列表(其中许多是重复的),而另一列是该日期记录的温度。有问题的列看起来像这样(但有几千行和一些其他不必要的列):

Date    |    Temp
-----------------
1/2/13     34.4
1/2/13     36.4
1/2/13     34.3
1/4/13     45.6
1/4/13     33.5
1/5/13     45.2

我需要找到一种方法来获得每日平均温度。所以理想情况下,我可以告诉 R 遍历 data.frame 并为每个匹配的日期,给我当天温度的平均值。我一直在谷歌搜索,我知道 R 中的循环是可能的,但鉴于我对 R 代码知之甚少,我无法从概念上解决这个问题。

我知道我可以抽出一列并对其求平均值(即 mean(data.frame[[2]]) ),但我完全不知道如何告诉 R 将该平均值与位于第一列中的单个值相匹配。

此外,我如何为每七个日历日生成一个平均值(无论一天存在多少条目)?所以,一个 7日滚动平均线 ,即如果我的日期范围从 13 年 1 月 1 日开始,我将获得 13 年 1 月 1 日和 13 年 1 月 7 日之间以及 13 年 1 月 8 日和 13 年 1 月 15 日之间所有温度的平均值等等...

非常感谢任何帮助我掌握 R 循环的帮助。谢谢!

编辑

这是 dput(head(my.dataframe)) 的输出请注意:我把“日期”和“时间戳”都删掉了,因为它们都有几千个条目,否则:
structure(list(RECID = 579:584, SITEID = c(101L, 101L, 101L, 
101L, 101L, 101L), MONTH = c(6L, 6L, 6L, 6L, 6L, 6L), DAY = c(7L, 
7L, 7L, 7L, 7L, 7L), DATE = structure(c(34L, 34L, 34L, 34L, 34L, 
34L), .Label = c("10/1/2013", "10/10/2013", "10/11/2013", "10/12/2013", 
"10/2/2013", "10/3/2013", "10/4/2013", "10/5/2013", "10/6/2013", 
"10/7/2013", "10/8/2013", "10/9/2013", "6/10/2013", "6/11/2013","9/9/2013"), class = "factor"), TIMESTAMP = structure(784:789, .Label = c("10/1/2013 0:00", 
"10/1/2013 1:00", "10/1/2013 10:00", "10/1/2013 11:00", "10/1/2013 12:00", 
"10/1/2013 13:00", "10/1/2013 14:00", "10/1/2013 15:00", "10/1/2013 16:00", 
"10/1/2013 17:00", "10/1/2013 18:00", "10/1/2013 19:00", "10/1/2013 2:00"), class = "factor"), TEMP = c(23.376, 23.376, 23.833, 24.146, 
24.219, 24.05), X.C = c(NA, NA, NA, NA, NA, NA)), .Names = c("RECID", 
"SITEID", "MONTH", "DAY", "DATE", "TIMESTAMP", "TEMP", "X.C"), row.names = c(NA, 
6L), class = "data.frame") 

最佳答案

这里有几个选项:

aggregate(Temp ~ Date, mydf, mean)
#     Date     Temp
# 1 1/2/13 35.03333
# 2 1/4/13 39.55000
# 3 1/5/13 45.20000

library(dplyr)
mydf %.% group_by(Date) %.% summarise(mean(Temp))
# Source: local data frame [3 x 2]
# 
#     Date mean(Temp)
# 1 1/2/13   35.03333
# 2 1/4/13   39.55000
# 3 1/5/13   45.20000

library(data.table)
DT <- data.table(mydf)
DT[, mean(Temp), by = Date]
#      Date       V1
# 1: 1/2/13 35.03333
# 2: 1/4/13 39.55000
# 3: 1/5/13 45.20000

library(xts)
dfX <- xts(mydf$Temp, as.Date(mydf$Date))
apply.daily(dfX, mean)
#             [,1]
# 1-02-13 35.03333
# 1-04-13 39.55000
# 1-05-13 45.20000

由于您正在处理日期,因此您应该探索 xts包,这将使您可以访问诸如 apply.daily 之类的功能, apply.weekly , apply.monthly等等,这将使您方便地聚合您的数据。

关于r - 按日期计算 data.frame 列平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179336/

相关文章:

使用 R 检索期刊论文的引用

r - 在 R 中应用空括号会删除属性吗? (阅读R语言定义)

windows-7 - 用于更改屏幕方向的 Powershell 脚本

for-loop - For 循环构造转为函数式

r - R 中的箱线图显示平均值(再次)

algorithm - 如何在响应矩阵的每一列上计算最小但快速的线性回归?

jquery - 一系列列表项的导航循环

python - 使用 Python mechanize 循环下载文件

java - 根据子值填充父 List 元素

c - 我的 C 代码有什么问题? (大数的主要因素)