Самый простой способ вычесть связанный с одним уровнем фактора из значений, связанных со всеми другими уровнями фактора

Я получил информационный фрейм, содержащий ставки для "в прямом эфире". лечение и цены за «убитых»; лечения. Я хотел бы вычесть убитые лечения из живых:

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" столбцы, так что было бы менее громоздко просто держать их там автоматически.

Ответы на вопрос(2)

Ваш ответ на вопрос