这就是我要做的:使用for循环计算并存储每辆自行车的平均圈速。下面的代码是我试图解决这个问题的方法。它给了我一个关于一些意外的花括号的错误,我不知道为什么。我必须使用for循环(没有tidyverse或任何其他包)。
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 " }"发布于 2020-10-20 02:26:29
使用tapply函数可以在一行代码中简化这一点:
> (lapmean<-tapply(racing$Time, racing$Bike, mean))
A1 A2 A3
70 71 68 更新:
我很确定为什么我的帖子被否决了,因为它需要更少的输入,而且比这里发布的任何其他过程都更高效(与性能最差的代码相比,效率是22倍)。我运行了提交的所有其他代码的执行时间,以下是从性能最好到性能最差的结果,以秒为单位:
<代码>H113Duck-0.22<代码>H214<代码>G215
发布于 2020-10-20 02:42:38
我们可以从base R使用aggregate
aggregate(Time ~ Bike, data = racing, FUN = mean)-output
# Bike Time
#1 A1 70
#2 A2 71
#3 A3 68或使用for循环
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 发布于 2020-10-20 02:22:51
尝尝这个。您可以创建一个向量来存储自行车,然后使用subset()对其进行循环,以过滤数据并计算平均时间。代码如下:
#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输出:
vmeans
A1 A2 A3
70 71 68 https://stackoverflow.com/questions/64433056
复制相似问题