我的数据集大致如下:
> dataSet
month detrend
1 Jan 315.71
2 Jan 317.45
3 Jan 317.5
4 Jan 317.1
5 Jan 315.71
6 Feb 317.45
7 Feb 313.5
8 Feb 317.1
9 Feb 314.37
10 Feb 315.41
11 March 316.44
12 March 315.73
13 March 318.73
14 March 315.55
15 March 312.64
.
.
.
如何按月计算平均值 ?例如,我想要像
这样的东西> by_month
month ave_detrend
1 Jan 315.71
2 Feb 317.45
3 March 317.5
答案 0 :(得分:1)
您需要关注的是按月对您感兴趣的列(“detrend”)进行分组的方法。在“vanilla R”中有很多方法可以做到这一点,但最有效的方法是使用tidyverse
的{{3}}。
我将使用直接从该页面获取的示例:
mtcars %>%
group_by(cyl) %>%
summarise(disp = mean(disp), sd = sd(disp))
在你的情况下,那将是:
by_month <- dataSet %>%
group_by(month) %>%
summarize(avg = mean(detrend))
这个新的“tidyverse
”风格看起来很不一样,你看起来很新,所以我会解释发生了什么(对不起,如果这个过于明显):
dataSet
。group_by
。管道意味着我们将最后一个命令的结果(在这种情况下只是数据帧dataSet
)并将其用作下一个函数的第一个参数。函数group_by
提供了一个数据框作为其第一个函数。summarize
(或summarise
,如果您来自下方,则作者是)。 summarize
只需使用列中的所有数据进行计算,然而,group_by
函数会在该列中创建分区。所以我们现在计算出我们制作的每个分区的平均值,即月份。
group_by
创建“标记”,以便summarize
分别计算每个组的函数(在本例中为mean
)。因此,例如,所有Jan
值都组合在一起,然后仅mean
计算它们。然后,对于所有Feb
值,计算平均值等。HTH !!
答案 1 :(得分:0)
R具有内置的均值函数:mean(x, trim = 0, na.rm = FALSE, ...)
我会做这样的事情:
january <- dataset[dataset[, "month"] == "january",]
januaryVector <- january[, "detrend"]
januaryAVG <- mean(januaryVector)