我有一个数据框,其中包含“活”治疗的费率和“死亡”治疗的费率。我想从活的治疗中减去被杀死的治疗:
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
for的值,由 id1 的级别分隔,同时保留. 我最终会得到id2=="killed"
y
otherFactor
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
,但实际上我有大约十几个“otherFactor”列,因此将它们自动保留在那里会不那么麻烦。