我有一个数据框,其中包含来自40个站点的每日数据,我需要计算每个站点的年平均值
日期.................. Site1 ..... Site2 ..... Site3 ..... Untilsite40
2006年1月1日................ 45 ......... 56 ......... 58 .............. ..........
2006年2月1日.......... 67 .......... 3 .......... 45 ............ ...........
2006年3月1日................ 12 .......... 51 ......... 9 ............. ...........
直到2014年
library("xlsx")
Trial <- read.xlsx ("Trial.xlsx", sheetIndex = 1, header = TRUE)
Trial
Trial$Date <- as.Date(Trial$Date)
Trial$Month <-months(Trial$Date)
Trial$Year <-format(Trial$Date, format="%y")
Means <- aggregate(Site1 ~ Month + Year, Trial, mean)
所有这些都有效,但是它计算的是每月平均值,而不是每年平均值,而且最重要的是,我如何将此代码应用于所有40个站点,而不仅是站点1。
答案 0 :(得分:0)
示例数据将有助于复制问题和解决方案!请编辑您的原始帖子。我只能猜测您的变量对应什么。
library(tidyverse)
Trial_Want<-Trial %>%
group_by(Site,Year) %>%
mutate(AnnualMean=mean(variableToAverage))
答案 1 :(得分:0)
一个data.table
答案:
library(data.table)
setDT(Trial)
Trial[, .(mean_val= mean(Site1), .(Month, Year)]
答案 2 :(得分:0)
变量为Site1,Site2,Site3,直到Site40
我还有一栏列出了日期
您需要首先重塑(整理)数据框。在这种特定情况下,您需要使其更长,每行每个站点一次观察。我假设每个站点都有像访问者数量这样的每日信息,所以要取一个平均值。
New_Trial %>%
group_by(site_id, Year) %>%
summarize(anual_mean = mean(number_visitors) )
上面的代码将每一行分成几行,创建变量 site_id ,以存储原始Site1到Site40的信息,另一列 number_visitors ,以存储其原始值。现在,所有信息都应该易于操作。
然后,您将可以使用 group_by 和总结的常规dplyr函数组合来分析数据:
{{1}}
答案 3 :(得分:0)
数据帧称为“试验”,头为真。
日期.................. Site1 ..... Site2 ..... Site3 ..... Untilsite40
2006年1月1日................ 45 ......... 56 ......... 58 .............. ..........
2006年2月1日.......... 67 .......... 3 .......... 45 ............ ...........
2006年3月1日................ 12 .......... 51 ......... 9 ............. ...........
直到2014年
日期分为几个月,然后是几年
Trial$Date <- as.Date(Trial$Date)
Trial$Month <-months(Trial$Date)
Trial$Year <-format(Trial$Date, format="%y")
然后,我需要使用cbind创建列的向量。我将向量命名为m1。注意:请确保向量是矩阵。
m1 <-cbind(Trial$Site1, Trial$Site2, ...)
最后一步是:
Means <- aggregate(m1 ~ Year, Trial, mean)