У меня есть фрейм данных, содержащий ставки на «живое» лечение и ставки на «убитое» лечение. Я хотел бы вычесть убитые обработки из живых:
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
, для которых id2=="killed"
, из всех остальных значений y
, разделенных уровнями id1, при сохранении 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», поэтому было бы менее обременительно просто хранить их там автоматически.