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
para cualid2=="killed"
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
poner los valores deotherFactor
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.