R中的ave()函数和mean()函数有什么区别?

时间:2019-08-12 14:58:19

标签: r

ave()中的mean()R函数之间有什么区别?

例如,我试图找出R中数据框特定列的平均值?

我遇到了以下两个功能:

mean(dataset$age, na.rm= TRUE)
ave(dataset$age, FUN=function(x)mean(x, na.rm = TRUE))

第一个函数显然给了我平均值作为单个值。而第二个函数也给了我平均值,但是元素的数量与数据帧行中不丢失的值一样多。为什么会这样呢?当均值整齐地给出平均值时,像ave()这样的函数有什么用?

1 个答案:

答案 0 :(得分:5)

详细介绍@akrun的评论-

假设x <- 1:10

1) mean总是 返回长度为1的向量

mean(x)
[1] 5.5

2) ave总是 返回与输入向量长度相同的向量

ave(x)
[1] 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5

关于ave的一件很酷的事情是,您还可以将x分成几组,并应用任何函数FUN来获得与x相同长度的输出-

让我们将x分为两组,每组分别包含3和7个元素,即rep(1:2,每个= 5)

(grouping <- rep(1:2, c(3,7)))
[1] 1 1 1 2 2 2 2 2 2 2

# Now calculating mean for each group -    
ave(x, grouping, FUN = mean)
[1] 2 2 2 7 7 7 7 7 7 7

# calculating sum for each group
ave(x, grouping, FUN = sum)
[1]  6  6  6 49 49 49 49 49 49 49

# any custom function can be applied to ave, not just mean
ave(x, grouping, FUN = function(a) sum(a^2))
[1]  14  14  14 371 371 371 371 371 371 371

以上结果类似于您从tapply获得的结果,不同之处在于输出的长度与x相同。

tapply(x, grouping, mean)
1 2 
2 7 

tapply(x, grouping, sum)
1  2 
6 49 

tapply(x, grouping, function(a) sum(a^2))
1   2 
14 371

最后,您可以定义自己的函数并将其传递给FUN的{​​{1}}参数,因此您不仅限于计算ave

mean属性使output length = input length 对于将列添加到表格数据非常有用。范例-Calculate group mean (or other summary stats) and assign to original data