Perhaps this untested stab at an answer. Tested solutions can be provided if you first provide a data object. There's also ambiguity about what an "equal category" might be. Equal counts? Or equal span? This answers the equal span which is what cut would deliver.
 nost13$actclass2 <- ifelse(nost13$actsum > 0,
                                 cut(nost13$actsum ,6), 0)
I suspect the coercion to numeric will occur inside ifelse. Your code would have attempted to append 0's to factors which would have ended in tears. If you wnat this to be a factor with levels "0"-"6" then wrap the entire ifelse(....) in factor(.).
Here's some lightweight testing:
 actclass2 <- ifelse(-100:100 > 0,
                                  cut(-100:100 ,6), 0)
 table(actclass2)
#------------
actclass2
  0   4   5   6 
101  33  33  34 
So depending on the distribution of values, you might not have gotten exactly what you wanted. This shows a modification of that strategy that will probably be more pleasing:
> vals <- -100:100
> splits <- seq(min(vals[vals>0]),max(vals[vals>0]), length=8)[-8]
> actclass2 <- ifelse(vals > 0,
+                           cut(vals ,breaks=splits ), 0)
> table(actclass2)
actclass2
  0   1   2   3   4   5   6 
101  14  14  14  14  14  14 
Need a sequence of length = 8 to get 6 intervals with cut, since the max value was discarded and need 7 boundaries to generate 6 intervals. After going through this I'm thinking that the findInterval function would produce a clearer path to success.
> table( findInterval( vals, c(-Inf, 0, splits[-1], Inf) ))
  1   2   3   4   5   6   7   8 
100  16  14  14  14  14  14  15 
findInterval has intervals closed on the left versus cut whose default is closed on the right.