Code for anova table

obs<-c(24,28,37,30,31,28,37,44,31,35,36,39,42,47,52,38,44,50)
m<-matrix(data = obs,ncol = 6,byrow = T)
m
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]   24   28   37   30   31   28
## [2,]   37   44   31   35   36   39
## [3,]   42   47   52   38   44   50
treatment_total<-rowSums(m)
treatment_total
## [1] 178 222 273
colSums(m)
## [1] 103 119 120 103 111 117
grand_total<-sum(m)
grand_total
## [1] 673
sst<-sum(m^2)-(sum(m))^2/length(m)
sst
## [1] 1076.278
sstrea<-sum(rowSums(m)^2)/ncol(m)-(sum(m))^2/length(m)
sstrea
## [1] 753.4444
sse<-(sst-sstrea)
sse
## [1] 322.8333
mmtrea<-sstrea/(nrow(m)-1)
mmtrea
## [1] 376.7222
mme<-sse/(length(m)-nrow(m))
mme
## [1] 21.52222
fratio<-mmtrea/mme
fratio
## [1] 17.50387
fvalue<-qf(p = 0.05,df1 = nrow(m)-1,df2 = length(m)-nrow(m),lower.tail = F)
fvalue 
## [1] 3.68232

Alternative code for anova table

obs<-c(24,28,37,30,31,28,37,44,31,35,36,39,42,47,52,38,44,50)
treat<-rep(c("a","b","c"),each=6)
treat
##  [1] "a" "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" "b" "c" "c" "c" "c" "c" "c"
data<-data.frame(obs,treat )

aov(obs~treat,data = data)
## Call:
##    aov(formula = obs ~ treat, data = data)
## 
## Terms:
##                    treat Residuals
## Sum of Squares  753.4444  322.8333
## Deg. of Freedom        2        15
## 
## Residual standard error: 4.639205
## Estimated effects may be unbalanced
summary(aov(obs~treat,data = data))
##             Df Sum Sq Mean Sq F value  Pr(>F)    
## treat        2  753.4   376.7    17.5 0.00012 ***
## Residuals   15  322.8    21.5                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
obs~treat
## obs ~ treat