【问题标题】:Calculate mean for subset of column计算列子集的平均值
【发布时间】:2019-01-27 05:26:37
【问题描述】:

我不知道如何计算 R 中列子集的平均值。我的具体问题是计算“年龄”40 岁以上和

mean(expenditures[["age">=40]]) 

并获得了成功,但是

mean(expenditures[["age"<40]]) 

没有成功。

因此,我被困在这个问题上。对于这个看似简单的问题,我将不胜感激。

【问题讨论】:

  • 您使用"age"&gt;=40 获得了成功,因为它本身会返回TRUE。你已经计算了整个向量的平均值。正确的方法是i &lt;- expenditures[["age"]] &gt;= 40; mean(expenditures[["age"]][i])mean(expenditures[["age"]][!i])
  • 为什么 "age" >= 40 返回 TRUE?我也可以吗
  • i
  • 还有,你说的没用……
  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。

标签: r subset mean


【解决方案1】:

您可以通过改变一个组列、group_by() 该列并使用 summarise() 计算平均值来一次性完成:

library(dplyr)

data("mtcars")

mtcars %>%
  group_by(group = ifelse(hp > 100, "> 100", "<= 100")) %>%
  summarise(mean = mean(hp))

给予:

# A tibble: 2 x 2
  group   mean
  <chr>  <dbl>
1 <= 100  76.3
2 > 100   174.

注意:感谢 Tino 的提示!

【讨论】:

    【解决方案2】:

    如果你不想使用额外的包:

    # some sample data:
    set.seed(123)
    df <- data.frame(age = sample(x = 20:50, size = 100, replace = TRUE),
                     expenditures = runif(n = 100, min = 100, max = 1000))
    
    aggregate(
      formula = expenditures ~ age >= 40,
      data = df,
      FUN = mean
    )
    

    要添加到 Paul 的解决方案,您还可以在 group_by 内创建组:

    library(dplyr)
    # using dplyr:
    df %>% 
      group_by(age >= 40) %>% 
      summarise_at(.vars = vars(expenditures), mean)
    

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2022-01-21
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多