К сожалению, кажется, нет пакета R пока что может генерировать хороший выход, как SPSS.Большинство функций для генерации таблиц, по-видимому, определяют их собственные специальные форматы, что приводит к неприятностям, если вы хотите экспортировать или работать над ним по-другому.
Но я уверен, что R способен на это, и поэтому я начал писать свои собственные функции. Я рад поделиться с вами результатом (работа в процессе - статус, но выполняется):
Следующая функция возвращает для всех фактор-переменных в data.frame частоту или процент (calc = " perc ") для каждого уровня переменной" переменная ".
Важнейшей вещью может быть то, что выход представляет собой простой & удобный для пользователя data.frame. Таким образом, по сравнению со многими другими функциями, нет никакой проблемы, чтобы экспортировать результаты, работать с ним любым способом.
Я понимаю, что есть большой потенциал для дальнейшего улучшения, т.е. добавить возможность выбора строки против процентного расчета колонки и т.д.
contitable <- function(survey_data, variable, calc="freq"){
# Check which variables are not given as factor
# and exlude them from the given data.frame
survey_data_factor_test <- as.logical(sapply(Survey, FUN=is.factor))
survey_data <- subset(survey_data, select=which(survey_data_factor_test))
# Inform the user about deleted variables
# is that proper use of printing to console during a function call??
# for now it worksjust fine...
flush.console()
writeLines(paste("\n ", sum(!survey_data_factor_test, na.rm=TRUE),
"non-factor variable(s) were excluded\n"))
variable_levels <- levels(survey_data[ , variable ])
variable_levels_length <- length(variable_levels)
# Initializing the data.frame which will gather the results
result <- data.frame("Variable", "Levels", t(rep(1, each=variable_levels_length)))
result_column_names <- paste(variable, variable_levels, sep=".")
names(result) <- c("Variable", "Levels", result_column_names)
for(column in 1:length(names(survey_data))){
column_levels_length <- length(levels(survey_data[ , column ]))
result_block <- as.data.frame(rep(names(survey_data)[column], each=column_levels_length))
result_block <- cbind(result_block, as.data.frame(levels(survey_data[,column])))
names(result_block) <- c("Variable", "Levels")
results <- table(survey_data[ , column ], survey_data[ , variable ])
if(calc=="perc"){
results <- apply(results, MARGIN=2, FUN=function(x){ x/sum(x) })
results <- round(results*100, 1)
}
results <- unclass(results)
results <- as.data.frame(results)
names(results) <- result_column_names
rownames(results) <- NULL
result_block <- cbind(result_block, results)
result <- rbind(result, result_block)
}
result <- result[-1,]
return(result)
}
когда вы говорите _like в picture_, вы открыты для улучшения или делает он должен точно соответствовать этому формату? :) –
Открыт для улучшения :) –