我有一個數據幀,包含'活'治療的費率和'死亡'治療的費率。我想從活的減去殺死治療:從與所有其他因子水平相關的值中減去與一個因子水平相關聯的最簡單的方法
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))
我想從y
的所有其他值,通過ID1的水平分離減去y
爲其id2=="killed"
的值,而保留。我最終會與
id1 id2 y otherFactor
a live1 9 1
a live2 9 1
b live1 10 2
b live2 10 3
這幾乎工程:
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"))
除了你失去otherFactor的值。也許我可以使用merge
來重新設置的值,但實際上我有大約十幾個「otherFactor」列,所以將它們自動保存在那裏不那麼麻煩。