[英]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.