對於數據框中的一系列列(變量),我需要爲每個變量的每個級別生成表。我創建了一個函數來查找範圍(Q1a)中的第一列,然後爲每個列之後的循環運行for循環。循環查找每列中的級別數量,然後第二個for循環應該生成表格並將其保存爲具有唯一文件名的.csv。在一列的範圍內爲每個因子級別生成表,在R中用dplyr和reshape2
實施例的數據幀:
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?
請包括您的預期輸出。從你的帖子中不清楚。 – lmo
您錯過了'write.csv'上的右括號。 – aosmith
這不是,IMO,對於SO來說是一個合適的問題。基本問題,如確保括號全部關閉,應在發佈問題前修復。 – dayne