Starting with some fake data:
set.seed(0)
Spot.number <- rep(147:149, each=10)
grupo <- rep(rep(1:2, each=5), 3)
APF <- rnorm(30)
gel <- data.frame(Spot.number, grupo, APF)
> head(gel)
  Spot.number grupo        APF
1         147     1  2.1780699
2         147     1 -0.2609347
3         147     1 -1.6125236
4         147     1  1.7863384
5         147     1  2.0325473
6         147     2  0.6261739
You can use lapply to loop through the subsets of gel, split by the Spot.number:
tests <- lapply(split(gel, gel$Spot.number), function(spot) t.test(APF ~ grupo, spot))
or just
tests <- by(gel, gel$Spot.number, function(spot) t.test(APF ~ grupo, spot))
You can then move on to e.g. taking only the p values:
sapply(tests, "[[", "p.value")
#      147       148       149 
#0.2941609 0.9723856 0.5726007 
or confidence interval
sapply(tests, "[[", "conf.int")
#           147       148        149
# [1,] -0.985218 -1.033815 -0.8748502
# [2,]  2.712395  1.066340  1.4240488
And the resulting vector or matrix will already have the Spot.number as names which can be very helpful.