gpt4 book ai didi

r - 具有唯一名称的所有向量值的平均值

转载 作者:行者123 更新时间:2023-12-03 22:12:44 25 4
gpt4 key购买 nike

我有一个很大的非唯一命名值列表,即:

tscores
11461 11461 11461 11461 14433
-1.966196e+01 7.808853e-01 2.065178e+01 5.630565e+00 -7.295436e+00
14433 14433 14433 14433 14433
2.036339e+00 -6.704906e+00 1.603803e+00 -1.118324e+01 1.450554e+00
14102 16153 16189 18563 18563
-1.137429e+01 7.053336e-02 1.011208e+00 -7.811194e+00 -6.749376e-01
18563 18563 22042 22042 22042
7.480217e-01 -9.909211e-01 -9.577424e-01 -7.887699e-02 -4.867706e-01

我希望能够更有效地提取与名称对应的所有值的子向量。目前,我正在使用:
u_tscores <- sapply(unique(names(tscores)), function(name, scores) {mean(scores[names(scores)==name])}, scores=tscores)

这对于我需要的来说太慢了。我知道必须有一种更简单的方法来获取具有相同名称的所有值。

最佳答案

您最好的选择是使用 lapplysplit(tscores,names(tscores))获得的名单上.为您赢得大约五倍的速度:

n <- 1000000
tscores <- runif(n)
names(tscores) <- sample(letters,n,replace=T)

system.time(
X <- tapply(tscores, names(tscores), mean)
)
user system elapsed
0.89 0.00 0.89

system.time(
X2 <- sapply(unique(names(tscores)), function(name, scores){
mean(scores[names(scores)==name])}, scores=tscores)
)
user system elapsed
0.73 0.05 0.78

system.time(
X3 <- unlist(lapply(split(tscores,names(tscores)),mean))
)
user system elapsed
0.11 0.02 0.13

编辑 :
system.time(X3 <- sapply(split(tscores,names(tscores)),mean))
user system elapsed
0.14 0.00 0.14

关于r - 具有唯一名称的所有向量值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com