A maneira mais fácil de subtrair associado a um nível de fator de valores associados a todos os outros níveis de fatores

Eu tenho um dataframe contendo taxas para tratamentos 'ao vivo' e taxas para tratamentos 'mortos'. Eu gostaria de subtrair os tratamentos mortos dos 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))

Eu gostaria de subtrair os valores dey para qualid2=="killed" de todos os outros valores dey, separados pelos níveis de id1, preservandootherFactor. Eu acabaria com

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

Isso quase 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"))

exceto que você perde os valores de otherFactor. Talvez eu possa usarmerge colocar os valores deotherFactor de volta, mas na realidade eu tenho cerca de uma dúzia de colunas "otherFactor", então seria menos complicado apenas mantê-las lá automaticamente.

questionAnswers(2)

yourAnswerToTheQuestion