La forma más fácil de restar asociado con un nivel de factor de los valores asociados con todos los demás niveles de factor

Tengo un marco de datos que contiene tasas para tratamientos "en vivo" y tasas para tratamientos "muertos". Me gustaría restar los tratamientos muertos de los vivos:

df <- data.frame(id1=gl(2, 3, labels=c("a", "b")),
                 id2=rep(gl(3, 1, labels=c("live1", "live2", "killed")), 2), 
                 y=c(10, 10, 1, 12, 12, 2),
                 otherFactor = gl(3, 2))

Me gustaría restar los valores dey&nbsp;para cualid2=="killed"&nbsp;de todos los otros valores dey, separados por los niveles de id1, conservandootherFactor. Terminaría con

id1    id2   y otherFactor
  a  live1   9           1
  a  live2   9           1
  b  live1  10           2
  b  live2  10           3

Esto casi funciona:

df_minusKill <- ddply(df, .(id1), function(x) x$y[x$id2!="killed"] - x$y[x$id2=="killed"])
names(df_minusKill) <- c("id1", "live1", "live2")
df_minusKill_melt <- melt(df_minusKill, measure.var=c("live1", "live2"))

excepto que pierdes los valores de otherFactor. Tal vez podría usarmerge&nbsp;poner los valores deotherFactor&nbsp;de nuevo, pero en realidad tengo alrededor de una docena de columnas de "otro Factor", por lo que sería menos engorroso mantenerlas allí automáticamente.