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
不会在这里工作。
我们可以使用dplyr
包summarise
和across
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 不会使用聚合函数正确计算均值的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用mean函数计算每个分组中的所有数值变量的聚合平均值
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值