假设我有两个向量,

v1 = c(1,2,1,4,5,6,2,2,4,5,5,6)
v2 = c('lo', 'lo', 'la', 'la', 'la', 'li', 'li', 'li', 'li', 'lo', 'li', 'la')

我想通过 v1 中定义的组( lo, la, li )取 v2 的平均值。什么是不循环的有效方法?

谢谢!

最佳答案

这是 tapply 的标准票价:

tapply(v1, v2, mean)
#       la       li       lo
# 4.000000 3.800000 2.666667

此外,一个有趣的方法可能是:
xtabs(v1 ~ v2)/table(v2)  ## sum divided by length

如果我猜测(其他人可以自由地实际进行基准测试),我会认为 tapplyby 在这种情况下的性能非常接近。 xtabs + table 不应该太慢,但肯定会因为双重制表而变慢。由于所有转换为 data.frame ,尝试简化输出等等,我认为 aggregate 是最慢的方法。

关于r - 通过在不同向量中定义的因子取一个向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24853791/

10-12 20:11