Изменение порядка столбчатых диаграмм - PullRequest
0 голосов
/ 28 марта 2020

newb ie R кодер здесь. У меня есть столбчатая диаграмма с накоплением в базе R, которую я хотел бы изменить численно по типу вопроса (Вопрос 1 Предварительно, Вопрос 1 Пост, Вопрос 2 Предварительно, Вопрос 2 Пост, и т. Д. c.)

Это возможно, довольно простое исправление, но я не могу заставить функцию переупорядочения работать. Другие вопросы по переупорядочению не совсем подходят к моему решению. Может быть, переупорядочить - не правильный способ go об этом?

Прикрепил мой график и базовый код. Спасибо огромное! Я ценю вашу помощь.

enter image description here

if(!require(psych)){install.packages("psych")}
if(!require(likert)){install.packages("likert")}
library(readxl)
setwd("MSSE 507 Capstone Data Analysis/")
read_xls("ProcessDataMSSE.xls")


Data = read_xls("ProcessDataMSSE.xls")

str(Data) # tbl_df, tbl, and data.frame classes

### Change Likert scores to factor and specify levels; factors because numeric values are ordinal

Data <- Data[, c(3:26)] # Get rid of the other columns! (Drop multiple columns) 

Data$`1Pre` <- factor(Data$`1Pre`,
                   levels = c("1", "2", "3", "4"),
                   ordered = TRUE)

Data$`1Post` = factor(Data$`1Post`,
                     levels = c("1", "2", "3", "4"),
                     ordered = TRUE)

Data$`2Pre` <- factor(Data$`2Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`2Post` = factor(Data$`2Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`3Pre` <- factor(Data$`3Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`3Post` = factor(Data$`3Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`4Pre` <- factor(Data$`4Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`4Post` = factor(Data$`4Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`5Pre` <- factor(Data$`5Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`5Post` = factor(Data$`5Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`6Pre` <- factor(Data$`6Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`6Post` = factor(Data$`6Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`7Pre` <- factor(Data$`7Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`7Post` = factor(Data$`7Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`8Pre` <- factor(Data$`8Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`8Post` = factor(Data$`8Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`9Pre` <- factor(Data$`9Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`9Post` = factor(Data$`9Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`10Pre` <- factor(Data$`10Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`10Post` = factor(Data$`10Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`11Pre` <- factor(Data$`11Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`11Post` = factor(Data$`11Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`12Pre` <- factor(Data$`12Pre`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data$`12Post` = factor(Data$`12Post`,
                      levels = c("1", "2", "3", "4"),
                      ordered = TRUE)

Data <- factor(Data,levels=Data[3:26])
Data
### Double check the data frame

library(psych) # Loads psych package

headTail(Data) # Displays last few and first few data

str(Data) # Shows structure of an object (observations and variables, etc.) - in this case, ordinal factors with 4 levels (1 through 4)

summary(Data) # Summary of the number of times you see a data point

Data$`1Pre` # This allows us to check how many data points are really there

str(Data)
### Remove unnecessary objects, removing the data frame in this case (we've converted that data frame into a table with the read.table function above)

library(likert)

Data <- as.data.frame(Data) # Makes the tibble a data frame

likert(Data) # This will give the percentage responses for each level and group

Result = likert(Data)

summary(Result) # This will give the mean and SD 


plot(Result,
     main = "Pre and Post Treatment Percentage Responses",
     ylab="Questions",
     type="bar")

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я в основном согласен с решением @DzimitryM. Мне неясно, однако, действительно ли это работает. В моем решении мне нужно использовать переменную items data.frame, а не data.frame как таковую. В коде ниже (внизу) есть некоторые комментарии, подчеркивающие это.

В любом случае, по этой причине я сделал рабочий пример с исполняемым кодом.

Я осознаю тот факт, что его можно улучшить; мой фокус был на исполняемости.

library(likert)

### mimic some of your data, with 'accepted' naming
Data <- data.frame(
  C01Pre  = as.character(c( rep(1, 10), rep(2, 60), rep(3, 25), rep(4, 5) )), 
  C01Post = as.character(c( rep(1, 25), rep(2, 52), rep(3, 21), rep(4, 2) )),
  C02Pre  = as.character(c( rep(1, 25), rep(2, 68), rep(3,  5), rep(4, 2) )),
  C02Post = as.character(c( rep(1, 30), rep(2, 53), rep(3, 13), rep(4, 4) )),
  C03Pre  = as.character(c( rep(1, 20), rep(2, 52), rep(3, 25), rep(4, 3) )),
  C03Post = as.character(c( rep(1, 20), rep(2, 39), rep(3, 35), rep(4, 6) ))
) 

### coerce to ordered factor 
Data$C01Pre  <- factor(Data$C01Pre,  levels = c("1", "2", "3", "4"), ordered = TRUE)
Data$C01Post <- factor(Data$C01Post, levels = c("1", "2", "3", "4"), ordered = TRUE)
Data$C02Pre  <- factor(Data$C02Pre,  levels = c("1", "2", "3", "4"), ordered = TRUE)
Data$C02Post <- factor(Data$C02Post, levels = c("1", "2", "3", "4"), ordered = TRUE)
Data$C03Pre  <- factor(Data$C03Pre,  levels = c("1", "2", "3", "4"), ordered = TRUE)
Data$C03Post <- factor(Data$C03Post, levels = c("1", "2", "3", "4"), ordered = TRUE)

Result = likert(Data)

### show the "natural" order when processed by likert()
summary(Result)  
# Item low neutral high mean        sd
# 6 C03Post  59       0   41 2.27 0.8510837
# 1  C01Pre  70       0   30 2.25 0.7017295
# 5  C03Pre  72       0   28 2.11 0.7506899
# 2 C01Post  77       0   23 2.00 0.7385489
# 4 C02Post  83       0   17 1.91 0.7666667
# 3  C02Pre  93       0    7 1.84 0.5983141

plot(Result, 
     group.order = names(Result$items)) ## this is the key!
                                        ## difference with other answer is:
                                        ## names of the "items" variable of the df
                                        ## not the data.frame itself 

Это приводит к следующему графику:

enter image description here

0 голосов
/ 30 марта 2020

Параметр группировки можно добавить к plot(), чтобы получить график, упорядоченный по именам столбцов исходного набора данных:

plot(Result,
     group.order = names(Data),
     type="bar")
...