首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用for循环计算平均值

在R中使用for循环计算平均值
EN

Stack Overflow用户
提问于 2020-10-20 02:16:50
回答 4查看 86关注 0票数 0

这就是我要做的:使用for循环计算并存储每辆自行车的平均圈速。下面的代码是我试图解决这个问题的方法。它给了我一个关于一些意外的花括号的错误,我不知道为什么。我必须使用for循环(没有tidyverse或任何其他包)。

代码语言:javascript
复制
racing <- data.frame(Bike=rep(c("A1", "A2", "A3"), times=4),
                     Lap=rep(c(1,2,3,4), each=3),
                     Time=c(71,70,67,73,72,66,68,74,69,68,68,70))
for(bike in racing){
  if([racing$Bike=="A1",]){
    time_mean <- mean(racing$Time)
  }
  else if([racing$Bike=="A2",]){
    time_mean1 <- mean(racing$Time)
  }
  else{
    time_mean2 <- mean(racing$Time)
  }
}
lap_mean <- c(time_mean, time_mean1, time_mean2)
    

Error: unexpected '}' in "    }"
EN

回答 4

Stack Overflow用户

发布于 2020-10-20 02:26:29

使用tapply函数可以在一行代码中简化这一点:

代码语言:javascript
复制
> (lapmean<-tapply(racing$Time, racing$Bike, mean))
A1 A2 A3 
70 71 68 

更新:

我很确定为什么我的帖子被否决了,因为它需要更少的输入,而且比这里发布的任何其他过程都更高效(与性能最差的代码相比,效率是22倍)。我运行了提交的所有其他代码的执行时间,以下是从性能最好到性能最差的结果,以秒为单位:

  1. My Code StatsStudent - .01使用tictoc package
  2. akrun (aggregate) - 0.03
  3. Dan - 0.07
  4. akrun (用于循环)-0.11

<代码>H113Duck-0.22<代码>H214<代码>G215

票数 2
EN

Stack Overflow用户

发布于 2020-10-20 02:42:38

我们可以从base R使用aggregate

代码语言:javascript
复制
aggregate(Time ~ Bike, data = racing, FUN = mean)

-output

代码语言:javascript
复制
#   Bike Time
#1   A1   70
#2   A2   71
#3   A3   68

或使用for循环

代码语言:javascript
复制
unb <- unique(racing$Bike)
out <- c()
for(bike in unb) {
     out <- c(out, mean(subset(racing, Bike == bike, select = Time)$Time))
 }

setNames(out, unb)
#   A1 A2 A3  
# 70 71 68 
票数 1
EN

Stack Overflow用户

发布于 2020-10-20 02:22:51

尝尝这个。您可以创建一个向量来存储自行车,然后使用subset()对其进行循环,以过滤数据并计算平均时间。代码如下:

代码语言:javascript
复制
#Data
racing <- data.frame(Bike=rep(c("A1", "A2", "A3"), times=4),
                     Lap=rep(c(1,2,3,4), each=3),
                     Time=c(71,70,67,73,72,66,68,74,69,68,68,70),stringsAsFactors = F)
#Bikes
vb <- unique(racing$Bike)
#Loop
vmeans <- numeric(length(vb))
for(i in 1:length(vb))
{
  #Data
  x <- subset(racing,Bike==vb[i])
  #Mean
  vmeans[i] <- mean(x$Time)
}
names(vmeans) <- vb

输出:

代码语言:javascript
复制
vmeans
A1 A2 A3 
70 71 68 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64433056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档