The*_*ice 4 loops for-loop average r dataframe
我在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
Run Code Online (Sandbox Code Playgroud)
我需要找到一种获得每日平均温度的方法.理想情况下,我可以让R循环遍历data.frame,并且对于匹配的每个日期,给我一个当天温度的平均值.我一直在谷歌搜索,我知道R中的循环是可能的,但我无法概念性地围绕这个概念,因为我对R代码知之甚少.
我知道我可以拉出一个列并对其进行平均(即mean(data.frame[[2]]))但是我完全迷失了如何告诉R将该均值与第一列中的单个值相匹配.
另外,我怎样才能每七个日历日生成一个平均值(无论一天有多少条目存在)?所以,一个七天的滚动平均值,即如果我的日期范围从1/1/13开始,我将获得在1/1/13和1/7/13之间所有温度的平均值,然后是1/8/13和1/15/13等等......
任何帮助我掌握R循环的帮助都非常感谢.谢谢!
编辑
这是dput(head(my.dataframe)) PLEASE的输出注意:我记下了"日期"和"时间戳",因为它们都会继续进行几千个条目:
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")
Run Code Online (Sandbox Code Playgroud)
以下是一些选项:
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
Run Code Online (Sandbox Code Playgroud)
因为你面对的日期,您应该探索的xts包,它会给你喜欢功能的访问apply.daily,apply.weekly,apply.monthly等这将让你方便的汇总数据.
library(plyr)
ddply(df, .(Date), summarize, daily_mean_Temp = mean(Temp))
Run Code Online (Sandbox Code Playgroud)
这是拆分-应用-组合范式的一个简单示例。
替代方案 #1 正如 Ananda Mahto 提到的,dplyr包是对plyr. 他展示了语法。
替代方案 #2:aggregate()功能上也是等效的,只是比plyr/dplyr.
另外“每 7 个日历日生成平均值”:您的意思是“一年中每周平均值”还是“移动 7 天平均值(尾随/领先/居中)”?
| 归档时间: |
|
| 查看次数: |
8473 次 |
| 最近记录: |