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
への変形に使用。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 に答える