2351 次
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 つのアプローチを次に示します。
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「ロング」から「ワイド」
reshapeへの変形に使用。dfareshape(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 に答える