Создание таблицы и построение графиков с использованием одной функции - PullRequest
0 голосов
/ 27 июня 2019

Я надеюсь использовать одну функцию, чтобы создать пропорциональный фрейм данных следующего набора данных и создать диаграмму результатов:

# Data
Id <- c(1,2,3,4,5,6,7,8,9,10)
Type <- c("Beginner", "Expert", "Intermediate", "Beginner", 
  "Professional", "Expert", "Intermediate", "Professional", 
  "Professional", "Expert")
Response<- c(1,1,2,2,1,2,1,2,1,1)
Successful <- data.frame(Id, Type, Response)
Successful

# Successful
Id  Type             Response    
1   Beginner         1
2   Expert           1
3   Intermediate     2
4   Beginner         2
5   Professional     1
6   Expert           2
7   Intermediate     1
8   Professional     2
9   Professional     1
10  Expert           1

# Function 1: creating a proportional data frame
StoreDF <- function(dataset, variable1, variable2){
as.data.frame(round(100* prop.table(table(dataset[[variable1]], 
                    dataset[[variable2]]),2), 1))
}

DFRespType <- StoreDF(Successful, "Response", "Type")
DFRespType

# Function 2: plotting the results
PropCompareBarPlot <- function(data, plottitle, xtitle){
   ggplot(data, aes(x=Var2, y=Freq, fill= Var1)) +
   geom_col(aes(fill=Var1), colour="Black") +
   ggtitle(plottitle) + 
   theme(plot.title = element_text(hjust=0.5)) +
   theme(legend.title = element_blank()) +
   xlab(xtitle) + ylab("Proportion") +
   scale_fill_manual(values = c("red", "green")) +
}

PropCompareBarPlot(DFRespType, "Responses Provided vs type of applicant", 
"Type/Level of training")

Есть ли способ объединить эти две функции водин?

Большое спасибо заранее за любую помощь, оказанную

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Другим способом является непосредственное использование функциональности ggplot с помощью пакета `scale. Нет необходимости использовать передаточную функцию:

library(scales)
library(ggplot2)

plottitle = "Responses Provided vs type of applicant"
xtitle = "Type/Level of training"
ggplot(Successful, aes(x=factor(Type),fill=factor(Response)))+
  geom_bar(position = "fill", colour = "black") +
  scale_fill_manual(values = c("red", "green")) + ggtitle(plottitle) + 
  theme(plot.title = element_text(hjust=0.5)) +
  theme(legend.title = element_blank()) +
  xlab(xtitle) + ylab("Proportion") +
  scale_y_continuous(labels = percent)

Это дает вам такие результаты:

enter image description here

Надеюсь, это поможет

0 голосов
/ 27 июня 2019

Просто объедините параметры вместе и объедините набор данных и data объекты в новый промежуточный объект, plot_data :

# FUNCTION
PropCompareBarPlot <- function(dataset, variable1, variable2, plottitle, xtitle){

       plot_data <- as.data.frame(round(100 * prop.table(table(dataset[[variable1]], 
                                                            dataset[[variable2]])
                                                         , 2)
                                        , 1)
                                  )

       ggplot(plot_data, aes(x=Var2, y=Freq, fill= Var1)) +
          geom_col(aes(fill=Var1), colour="Black") +
          ggtitle(plottitle) + 
          theme(plot.title = element_text(hjust=0.5)) +
          theme(legend.title = element_blank()) +
          xlab(xtitle) + ylab("Proportion") +
          scale_fill_manual(values = c("red", "green")) +
}

# FUNCTION CALL BY NAME OR POSITION
PropCompareBarPlot(dataset = Successful, 
                   variable1 = "Response", 
                   variable2 = "Type",
                   plottitle = "Responses Provided vs type of applicant", 
                   xtitle = "Type/Level of training")

PropCompareBarPlot(Successful, "Response", "Type",
                   "Responses Provided vs type of applicant", "Type/Level of training")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...