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

Arj*_*hav 0 r

ave()mean()功能之间有什么区别R

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

我遇到了以下两个功能:

mean(dataset$age, na.rm= TRUE)
ave(dataset$age, FUN=function(x)mean(x, na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

第一个函数显然给了我平均值作为单个值。而第二个函数也给了我平均值,但是元素的个数与数据帧各行中的非缺失值一样多。为什么会这样呢?ave()当mean整齐地赋予ave时,函数的用途是什么?

Shr*_*ree 5

详细介绍@akrun的评论-

假设x <- 1:10

1) mean始终返回长度为1的向量

mean(x)
[1] 5.5
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有趣的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
Run Code Online (Sandbox Code Playgroud)

以上结果与您从a获得的结果相似,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
Run Code Online (Sandbox Code Playgroud)

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

output length = input length属性ave 对于将列添加到表格数据非常有用。示例- 计算组平均值(或其他汇总统计信息)并分配给原始数据