【问题标题】:Find mean of one variable, depending on another, which is grouped by a third求一个变量的均值,取决于另一个变量,按第三个分组
【发布时间】:2021-08-22 15:21:45
【问题描述】:

这里是业余爱好者。我有一个数据集,我想在其中找到每个观察到的行为的平均值(小时),白天和黑夜。示例如下。

Period Behaviour Hours
Day Walking 3.5
Day Standing 2
Night Grazing 5
Night Lying 4.5

理想情况下,我想获得白天和晚上每种行为的平均值(小时)。我试过用;

聚合(df$Hours, list(df$Behaviour), mean)

这给了我每个行为作为一个整体的平均值,我不知道如何进一步按期间分组以获得白天和黑夜的划分。希望这是有道理的。

【问题讨论】:

    标签: r grouping mean


    【解决方案1】:

    您可以使用以下解决方案:

    library(dplyr)
    
    df %>%
      group_by(Period, Behaviour) %>%
      summarise(avg = mean(Hours, na.rm = TRUE))
    
    # A tibble: 4 x 3
    # Groups:   Period [2]
      Period Behaviour   avg
      <chr>  <chr>     <dbl>
    1 Day    Standing    2  
    2 Day    Walking     3.5
    3 Night  Grazing     5  
    4 Night  Lying       4.5
    

    或者这可能是基础 R:

    aggregate(df$Hours, by = list(df$Period, df$Behaviour), FUN = mean)
    
      Group.1  Group.2   x
    1   Night  Grazing 5.0
    2   Night    Lying 4.5
    3     Day Standing 2.0
    4     Day  Walking 3.5
    

    【讨论】:

    • 太棒了!非常感谢你帮助我。
    • 我的荣幸。您的代码的唯一问题是您应该将第二个分组变量 df$Period 包含在 aggregate 函数的 by 参数列表中。事实上,你完全正确。
    • 我很接近。对 R 来说非常新,但到目前为止很享受!再次感谢您的快速回复。非常感谢。
    • 只需完整阅读文档,在这里您可以学到所有您需要的东西。
    【解决方案2】:

    或者我们可以使用data.table

    library(data.table)
    setDT(df)[, .(avg = mean(Hours, na.rm = TRUE)), .(Period, Behaviour)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多