带有前测和后测的ggplot中的Likert堆叠条形图

带有前测和后测的ggplot中的Likert堆叠条形图,r,ggplot2,likert,R,Ggplot2,Likert,我是R和老师的新手,所以谢谢你们的耐心。我在Likert堆叠条形图上搜索了许多其他问题(但不完全是我正在努力解决的问题)。我似乎找不到一个讨论如何将测试前和测试后的结果拉到同一个堆叠条形图中。我已经阅读了Hayley的R for Data Science书籍、GitHub示例、R Companion手册和R Cookbook。还是真的需要一些帮助,作为初学者 我有一组12个学生的问题,每个问题都有一个测试前和测试后的回答,在“强烈同意”到“强烈不同意”的范围内 我的问题是:学生的调查结果在考试前

我是R和老师的新手,所以谢谢你们的耐心。我在Likert堆叠条形图上搜索了许多其他问题(但不完全是我正在努力解决的问题)。我似乎找不到一个讨论如何将测试前和测试后的结果拉到同一个堆叠条形图中。我已经阅读了Hayley的R for Data Science书籍、GitHub示例、R Companion手册和R Cookbook。还是真的需要一些帮助,作为初学者

我有一组12个学生的问题,每个问题都有一个测试前和测试后的回答,在“强烈同意”到“强烈不同意”的范围内

我的问题是:学生的调查结果在考试前后是如何变化的

我的数据最初显示为:

Student sex(F=0,M=1)  PreTestQ1   PostTestQ1
1       0              Agree      Disagree
2       0              Disagree   Agree
3       1              Agree      Agree
4       1              Disagree   Agree
首先,我将同意/不同意转换为数字数据(强烈同意=1,强烈不同意=4,无中性选项),并使用以下方法从宽到长整理数据:

    # Set data frame as wide
msse_wide <- read_xls("ProcessDataMSSE.xls")
colnames(msse_wide) # Displays names of columns
head(msse_wide)


# Set data frame as long, after running wide code above
msse_long <- msse_wide %>%
  gather(question,obs_prepost, c(2:25)) # This pulls the columns from 2 to 25 (not including the "sex" column), test it out first as a precaution

# NOW MY DATA IS TIDY!!!! :)
#将数据帧设置为宽
msse_宽msse_长
#泰伯:1824x3
性别问题
1第10页,第3页
2 0 1第3部分
3 0 1第2部分
4 0 1第3部分
5.0第2部分
6.0第3部分
7.0第3部分
8.0第2部分
9.0第2部分
10 0 1第4部分
#…还有1814行
现在,我想将强烈同意-强烈不同意的回答的百分比可视化为一个堆叠条形图,使用百分比回答,并将测试前和测试后作为堆叠条形图进行比较(因此,在测试前和测试后的12个问题中,我总共有24个堆叠条形图)

最终目标类似于R Companion的示例: …除了我被困在如何从我的数据中提取百分比,并将测试前和测试后一个接一个地进行比较之外。

类似这样的事情?:

数据:

编辑: 感谢@dc37的评论:

添加

+ coord_flip()
根据上述代码,给出:

说明:

从广泛形式的数据开始,我们使用
pivot\u longer
tidyr
s
collect
的继承者来获得所需的结构

然后,我们通过
测试
(个体回答水平)分组,并通过使用dplyr的
n
功能统计每组的案例进行总结

然后我们变异(在本例中,创建)一列,将每个
测试的计数除以每个
测试组的总和(
dplyr
现在仅按第一组进行分组,
Test

最后,我们使用
ggplot2
来绘制数据,并
缩放
来标记百分比轴。

类似这样的内容:

数据:

编辑: 感谢@dc37的评论:

添加

+ coord_flip()
根据上述代码,给出:

说明:

从广泛形式的数据开始,我们使用
pivot\u longer
tidyr
s
collect
的继承者来获得所需的结构

然后,我们通过
测试
(个体回答水平)分组,并通过使用dplyr的
n
功能统计每组的案例进行总结

然后我们变异(在本例中,创建)一列,将每个
测试的计数除以每个
测试组的总和(
dplyr
现在仅按第一组进行分组,
Test


最后,我们使用
ggplot2
来绘制数据,并
缩放
来标记百分比轴。

我得到了一些似乎有效的方法,只有前后处理不符合顺序。这是在R基地。谢谢你的帮助

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")

if(!require(psych)){install.packages(“psych”)}
如果(!require(likert)){install.packages(“likert”)}
图书馆(readxl)
setwd(“MSSE 507顶石数据分析/”)
read_xls(“ProcessDataMSSE.xls”)
Data=read_xls(“ProcessDataMSSE.xls”)
str(Data)#tbl_df、tbl和Data.frame类
###将Likert分数更改为因子并指定等级;因子,因为数值是顺序的

数据我发现了一些似乎有效的方法,只是治疗前后的顺序不正确。这是在R基地。谢谢你的帮助

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")

if(!require(psych)){install.packages(“psych”)}
如果(!require(likert)){install.packages(“likert”)}
图书馆(readxl)
setwd(“MSSE 507顶石数据分析/”)
read_xls(“ProcessDataMSSE.xls”)
Data=read_xls(“ProcessDataMSSE.xls”)
str(Data)#tbl_df、tbl和Data.frame类
###将Likert分数更改为因子并指定等级;因子,因为数值是顺序的

您共享的绘图数据很难读取。。。x轴似乎与每个条中的百分比没有多大关系?您能否将
dput(msse\u long)
输出添加到您的问题中?并显示您尝试过的任何绘图代码?我更希望有一个从0%到100%运行的x轴,但绘图的基本形式就是我要找的。我是R新手,所以我还不知道如何编写绘图代码。您共享的绘图很难阅读。。。x轴似乎与每个条中的百分比没有多大关系?您能否将
dput(msse\u long)
输出添加到您的问题中?并显示您尝试过的任何绘图代码?我更希望有一个从0%到100%运行的x轴,但绘图的基本形式就是我要找的。我是R新手,所以我还不知道如何绘制代码。谢谢!这让我更接近我的目标,我不知道pivot_longer函数。谢谢!这使我更接近我的目标,我不知道pivot_longer函数。
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")