5

mytable私は、A と B の 2 つの測定値の結果を含むデータ フレームを、あるグループの人物に対して取得しました。

person measure outcome
1      A       3.6
2      A       2.3
3      A       4.2
1      B       3.9
2      B       3.2
3      B       2.7

A と B のスコアの差を各人について計算したいと思います。つまり、取得したいのは次のとおりです。

person outcome_diff
1      -0.3
2      -0.9
3       1.5

私は答えを探しましたが、要因のレベル内ではなく、要因のレベル内の変換に関するいくつかしか見つかりませんでした。

私は最終的に次のようにしてそれを解決することができました:

mytable$outcome[mytable$measure=="B"] <- -1*mytable$outcome[mytable$measure=="B"]
outtable <- aggregate(outcome ~ person, data=mytable, FUN=sum)

それは機能しますが、元のテーブルを台無しにせずにそれを行うにはどうすればよいでしょうか。さらに、このソリューションは、差の計算に非常に特化しています。同じことを達成するためのより一般的な方法は何ですか?

4

3 に答える 3

6

私は使用しますplyr

ddply(mytable, "person", summarize,
      outcome_diff = outcome[measure == "A"] -
                     outcome[measure == "B"])
#   person outcome_diff
# 1      1         -0.3
# 2      2         -0.9
# 3      3          1.5

A常に 2 つのメジャーとBと がこの順序であると仮定すると、 も実行できますddply(mytable, "person", summarize, outcome_diff = -diff(outcome))

于 2013-06-19T02:19:49.077 に答える
3

data.table解決策:

library(data.table)
DT <- as.data.table(dat)
DT[  , list(outcome_diff = outcome[measure == "A"] - 
              outcome[measure == "B"]),person]
# person outcome_diff
# 1:      1         -0.3
# 2:      2         -0.9
# 3:      3          1.5
于 2013-06-19T05:24:24.433 に答える