繁体   English   中英

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

[英]Compute data.frame column averages by date

我在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个日历日生成一个平均值(不管一天中有多少个条目)? 因此,一个7天的滚动平均值 ,即如果我的日期范围从1/1/13开始,我将获得1/1/13到1/7/13之间的所有临时值的平均值,然后是1/8 / 13和1/15/13,依此类推...

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

编辑

这是dput(head(my.dataframe))的输出, 请注意:我编辑了“ date”和“ timestamp”,因为它们都继续输入数千条,否则:

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.dailyapply.weeklyapply.monthly等功能,这些功能可以方便地汇总数据。

library(plyr)

ddply(df, .(Date), summarize, daily_mean_Temp = mean(Temp))

这是“拆分应用合并”范例的简单示例。

正如Ananda Mahto提到的替代方法1, dplyr软件包是对plyr的高性能重写。 他显示了语法。

备选方案2: aggregate()在功能上也等效,只是比plyr/dplyr


另外, “每7个日历日生成平均值” :您是指“一年中的每周平均值” ,还是“移动7天平均值(尾随/领先/居中)”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM