A way to do this built into R is base::tapply().
d <- data.frame(
category = c("x","x","x","x","x","y","y","y","y","y","z","z","z","z","z"),
value = c(29,-30,48,58,-67,56,-32,75,61,32,-38,24,43,44,-56))
tapply(d$value, d$category, FUN = sum)
# x y z
# 38 192 17