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时,函数的用途是什么?
详细介绍@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 对于将列添加到表格数据非常有用。示例- 计算组平均值(或其他汇总统计信息)并分配给原始数据