6
4

1 に答える 1

11

meltここまでたどり着いたので、txオブジェクトをdcast次のように使用してみませんか。

dcast(melt(tx, id.vars=c(1, 2)), ExamenYear ~ StudentGender + variable)
#   ExamenYear F_participated F_passed M_participated M_passed
# 1       2007              1        1              1        1
# 2       2008              1        1              2        2
# 3       2009             NA       NA              3        2

ただし、より直接的なアプローチは、おそらくmelt最初からデータに対して行うことです。

df.m <- melt(df, id.vars=c(1:4))
dcast(df.m, ExamenYear ~ StudentGender + variable, 
      function(x) sum(x == "yes"))
#   ExamenYear F_participated F_passed M_participated M_passed
# 1       2007              1        1              1        1
# 2       2008              1        1              2        2
# 3       2009              0        0              3        2

更新: Base R アプローチ

必要なコードは「きれい」ではありませんが、ベース R でこれを行うこともそれほど難しくありません。1 つのアプローチを次に示します。

  1. aggregate()あなたの例から取得するために使用しtxます。

    dfa <- aggregate(cbind(participated, passed) ~ 
      ExamenYear + StudentGender, df, function(x) sum(x == "yes"))
    dfa
    #   ExamenYear StudentGender participated passed
    # 1       2007             F            1      1
    # 2       2008             F            1      1
    # 3       2007             M            1      1
    # 4       2008             M            2      2
    # 5       2009             M            3      2
    
  2. 「ロング」から「ワイド」reshapeへの変形に使用。dfa

    reshape(dfa, direction = "wide", 
            idvar="ExamenYear", timevar="StudentGender")
    #   ExamenYear participated.F passed.F participated.M passed.M
    # 1       2007              1        1              1        1
    # 2       2008              1        1              2        2
    # 5       2009             NA       NA              3        2
    
于 2012-09-15T11:59:45.590 に答える