データフレーム内のある範囲の列(変数)に対して、各変数の各レベルの表を生成する必要があります。私は範囲(Q1a)の最初の列を見つけて、その後すべての列のforループを実行する関数を作成しました。ループは各列のレベル数を見つけ、次に2番目のforループはテーブルを生成し、それを一意のファイル名で.csvとして保存することになっています。dplyrとreshape2を使用してRの範囲で各因子レベルの表を生成
例のデータフレーム:
df <- data.frame(Organization = c("A", "B", "C", "D"), Gender = c("Male", "Female", "Male", "Female"), Q1a = c(1, 2, 3, 4), Q1b = c(1, 2, 1, 2))
DF戻り値:
library(dplyr)
library(reshape2)
f = function(df) {
a <- which(colnames(df) == "Q1a")
for(i in colnames(df[, a:length(df)])) {
levelsList <- as.list(levels(i))
for(j in levelsList) {
temp <- subset(df, i == j, select = c(Organization, Gender, i))
temp <- group_by(temp, Organization, Gender)
table <- summarize(temp, count = n())
table <- dcast(table, Organization ~ Gender)
table <- mutate(table, Total = Female + Male)
write.csv(table, paste0(i, "_", j, ".csv"))
}
}
}
ようになり、より大きなデータセットに対する期待出力:ここ
Organization Gender Q1a Q1b
1 A Male 1 1
2 B Female 2 2
3 C Male 3 1
4 D Female 4 2
は、私が書いた関数です。
Organization Female Male Total
1 A 366 259 625
2 B 30 35 65
3 C 83 61 144
4 D 55 58 113
上記のような1つのテーブルを、数行のコードで正しく生成することができます。問題は、関数がファイルを生成しないことです。正しい軌道にいるのですか?適用を使用してこれを行う簡単な方法はありますか?
予想される出力を含めてください。あなたのポストからは分かりません。 – lmo
'write.csv'に閉じ括弧がありません。 – aosmith
これは、IMOではないので、適切な質問です。括弧がすべて閉じていることを確認するなどの基本的な問題は、質問を投稿する前に修正する必要があります。 – dayne