【发布时间】:2016-07-28 18:37:34
【问题描述】:
对于数据框中的一系列列(变量),我需要为每个变量的每个级别生成表。我创建了一个函数,它在范围 (Q1a) 中找到第一列,然后为之后的每一列运行一个 for 循环。该循环查找每列中的级别数,然后第二个 for 循环应该生成表并将其保存为具有唯一文件名的 .csv。
示例数据框:
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 返回:
Organization Gender Q1a Q1b
1 A Male 1 1
2 B Female 2 2
3 C Male 3 1
4 D Female 4 2
这是我写的函数:
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 Female Male Total
1 A 366 259 625
2 B 30 35 65
3 C 83 61 144
4 D 55 58 113
我可以用几行代码正确地生成一个像上面那样的表。问题是该函数不生成任何文件。我在正确的轨道上吗?有没有更简单的方法来使用 apply?
【问题讨论】:
-
请包括您的预期输出。从您的帖子中不清楚。
-
您缺少
write.csv的右括号。 -
国际海事组织,这不是一个适合 SO 的问题。基本问题(例如确保括号全部闭合)应在发布问题之前解决。
-
你是对的。我很抱歉。但是,进行该编辑不会使脚本正常工作。我已经适当地附加了我的提交。感谢您的反馈。