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.