ave()
中的mean()
和R
函数之间有什么区别?
例如,我试图找出R中数据框特定列的平均值?
我遇到了以下两个功能:
mean(dataset$age, na.rm= TRUE)
ave(dataset$age, FUN=function(x)mean(x, na.rm = TRUE))
第一个函数显然给了我平均值作为单个值。而第二个函数也给了我平均值,但是元素的数量与数据帧行中不丢失的值一样多。为什么会这样呢?当均值整齐地给出平均值时,像ave()
这样的函数有什么用?
答案 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