【问题标题】:Calculations by Subgroup in a Column [duplicate]列中子组的计算[重复]
【发布时间】:2017-12-07 05:17:23
【问题描述】:

我有一个大致如下所示的数据集:

> 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

【问题讨论】:

  • 请提供一个实际的“可运行”示例。此外,听起来您知道大量的统计数据;请解释您所说的“去趋势”是什么意思。您是说“去趋势”数据代表线性拟合的残差吗?谢谢。
  • 我刚刚编辑了问题,希望对您有所帮助。
  • 嗨@K.M.M 我严格编辑了你的问题,以便未来的读者(和助手)更容易阅读。了解如何在此板上提出问题很有用,以确保您更快地获得更好的答案。 :)

标签: r tidyverse


【解决方案1】:

您需要关注的是按月份对您感兴趣的列(“去趋势”)进行分组的方法。在“vanilla R”中有很多方法可以做到这一点,但最有效的方法是使用tidyversedplyr

我将使用直接取自该页面的示例:

mtcars %>%
  group_by(cyl) %>%
  summarise(disp = mean(disp), sd = sd(disp))

在你的情况下,那将是:

by_month <- dataSet %>%
  group_by(month) %>%
  summarize(avg = mean(detrend))

这个新的“tidyverse”风格看起来很不一样,你看起来很新,所以我会解释发生了什么(对不起,如果这太明显了):

  1. 首先,我们正在抓取数据帧,我称之为dataSet
  2. 然后我们将该数据集管道到我们的下一个函数,即group_by。管道意味着我们将最后一个命令的结果(在这种情况下只是数据帧dataSet)并将其用作我们下一个函数的第一个参数。函数 group_by 有一个数据框作为它的第一个函数。
  3. 然后该 group by 的 results 被传送到下一个函数,即 summarize(或者 summarise,如果您来自下面,就像作者一样)。 summarize 只是使用列中的所有数据进行计算,但是,group_by 函数会在该列中创建分区。所以我们现在计算了我们创建的每个分区的平均值,即月份。
    • 这是关键:group_by 创建“标志”以便summarize 在每个组上分别计算函数(在本例中为mean)。因此,例如,所有Jan 值都组合在一起,然后仅在它们上计算mean。然后对于所有 Feb 值,计算平均值等。

HTH!!

【讨论】:

    【解决方案2】:

    R 有一个内置的均值函数:mean(x, trim = 0, na.rm = FALSE, ...)

    我会这样做:

    january <- dataset[dataset[, "month"] == "january",]
    januaryVector <- january[, "detrend"]
    januaryAVG <- mean(januaryVector)
    

    【讨论】:

    • 我明白,但我不确定如何将其合并到我需要的功能中(只是在问题中做了一个小的编辑)。我尝试了“if(Month==3) {mean(detrend)}”,但它给了我一条错误消息,说“在 if (Month == 3) { : 条件的长度 > 1 并且只有第一个元素是用过”
    • @K.M.M detrend 不会分成几个月,所以你需要这样做。您还需要分配一个变量。 Average &lt;- mean(new_detrend)
    • > January_detrend head(January_detrend) [1] TRUE FALSE FALSE FALSE FALSE FALSE > 平均
    • 好的,我尝试这样做,但仍然出现错误(见下文,而不是上文),但仍然出现错误。
    • > January_detrend head(January_detrend) [1] TRUE FALSE FALSE FALSE FALSE FALSE > 平均
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多