R 不会使用聚合函数正确计算均值

Posted

技术标签:

【中文标题】R 不会使用聚合函数正确计算均值【英文标题】:R won't compute means correctly with aggregate function 【发布时间】:2021-08-16 02:29:52 【问题描述】:

不确定为什么 R 不能正确计算我的数据的平均值。我确实有很多 NA 值,但 R 一直告诉我平均值是 NA。这是一个例子:

data1=read_excel"pepper.xlsx"

data1$cultivar = as.factor(data1$cultivar)

mean = aggregate(data1[,3:4], list(data1$cultivar), mean)
cultivar replication width height
BOF 1 12 14
BOF 2 10 NA
BOF 3 NA 15
BOF 4 NA NA

它不是计算 BOF 的平均宽度为 11 和平均 height 为 14.5,而是计算高度和宽度的平均值为 NA。这是对我的数据的过度简化。我的研究中有几个品种,并使用aggregate 函数计算了每个品种的每个变量的平均值。

【问题讨论】:

mean 有一个参数 na.rm 来删除缺失值。添加na.rm = TRUE 作为参数。详情请见?mean 另外,请注意您的措辞 - “R 不会正确计算意味着”听起来好像您认为 R 中存在错误。“我如何忽略 mean 中的缺失值”是更政治化的方式来表达这个问题。 aggregate(.~cultivar, data1, mean, na.rm = TRUE) @GregorThomas 谢谢!这解决了我的问题。对措辞感到抱歉,但感谢您的提醒。我以前从未编码过,我希望自学 R 来分析我的研究生课程的数据。希望如果我不小心说错了话或做错了事,我不会受到这个社区的强烈反对。只是来这里学习! 这能回答你的问题吗? How do I get R to ignore N/A values without having it delete the whole row? 【参考方案1】:

更新: 不需要匿名函数(感谢 Gregor Thomas,参见 cmets)。我们可以使用:

summarise(across(where(is.numeric), mean, na.rm = TRUE))

第一个答案: 感谢 Gregor Thomas colMeans不会在这里工作。 我们可以使用dplyrsummariseacross

library(dplyr)

df %>% 
  group_by(cultivar) %>% 
  summarise(across(where(is.numeric),~ mean(., na.rm = TRUE)))

输出:

  cultivar replication width height
  <chr>          <dbl> <dbl>  <dbl>
1 BOF              2.5    11   14.5

【讨论】:

这并没有考虑到 aggregate 所做的分组......这就是我猜测你为什么要投票的原因。 @Gregor Thomas。谢谢你的提示。请看我的编辑! 这里不需要匿名函数,可以简化为summarise(across(where(is.numeric), mean, na.rm = TRUE)) 感谢格雷戈尔·托马斯。我已经更新了答案!【参考方案2】:

试试这个:

mean = aggregate(data1[,3:4], list(data1$cultivar), mean, na.rm = TRUE, na.action = na.pass)

【讨论】:

以上是关于R 不会使用聚合函数正确计算均值的主要内容,如果未能解决你的问题,请参考以下文章

R语言aggregate函数数据聚合实战

MySQL函数的聚合函数

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用mean函数计算每个分组中的所有数值变量的聚合平均值

numpy 函数来聚合时间信号?

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值