繁体   English   中英

R中计算均值的不同方法

[英]Different ways of calculating mean in R

我正在尝试使用一些限制来计算数据帧的列的平均值,因此首先我做了:

mean(Ykkonen$deltaA[Ykkonen$PH<=2.5], na.rm = TRUE)

但是当我尝试

Ykkonen %>% filter(PH<=2.5) %>% mean(deltaA, na.rm = TRUE)

我得到错误

[1] NA
Warning message:
In mean.default(., deltaA) :
argument is not numeric or logical: returning NA

但是, deltaA是数字。 所以我试图理解为什么使用管%>%有什么不同?

我的意思是,如果我通过键入dataframe %>% filter(a=='s')正确理解它,则它应该仅返回变量a带有s条目,对吗?

您需要使用摘要功能来获得所需的结果。

Ykkonen %>% filter(PH<=2.5) %>% summarise(mean = mean(deltaA, na.rm = TRUE)

使用Ykkonen %>% filter(PH<=2.5)时,应检查返回的内容。 这将是一个data.frame(小标题),而不是一个向量。 因此,当您在过滤器之后使用均值时,您将给均值一个data.frame,这将导致此错误。 均值执行的检查之一是:

if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
warning("argument is not numeric or logical: returning NA") 

并且data.frame不会通过此测试。

如果要返回一个值作为数字矢量(长度为1),则可以使用pull

Ykkonen %>% filter(PH<=2.5) %>% pull(deltaA) %>% mean(na.rm = TRUE)

这是一个可重现的示例:

library(dplyr)

mtcars %>% filter(qsec >= 17) %>% pull(drat) %>% mean(na.rm = TRUE)
# [1] 3.561304

为了确保目标是数字,您还可以这样使用summarize_if

mtcars %>% filter(qsec >= 17) %>% summarize_if(is.numeric, mean) %>% pull(drat)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM