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

5

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

比如说,我想要在 R 中求出一个数据框(dataframe)的某一列的平均值。

我找到了这两个函数:

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

第一个函数明显给出了均值的单一值。而第二个函数也给出了均值,但元素数量与数据框中非缺失值行数相同。为什么会这样?还有像 ave() 这样的函数有什么用,当mean函数已经很好地给出了平均值呢?

2
ave默认按组执行mean,用于创建新列,因为它返回与输入相同length的输出,并且顺序保持不变。 - akrun
@akrun - 我不明白。你能详细解释一下吗? - Arjun Raaghav
4
ave(1:10, rep(1:2, each = 5)) 返回的是前五个数和后五个数的均值,长度总共为10,而mean(1:10)则返回1到10所有数字的平均值。对于ave(1:5, c(3, 4, 1, 3, 4))中的顺序,相应组别的均值将以与c(3, 4, 1, 3, 4)相同的顺序返回。 - akrun
1个回答

16

对@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, each = 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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接