RStudion 的介面环境可分为四大块:Source(程序代碼编辑视窗)、Console(控制台视窗)、 Enviroment/History(环境视窗) 以及Files/Plots/Packages/Help/Tutorial/Viewer/Presentation(档案/绘图/套件…视窗)
我们通常会将R的工作环境先进行一些设置,这些设置包括了「设置系统默认目录」、 「设置文字编码类型」、「设置字体格式大小」、「设置套件下载点」等。
当我们开始进行分析前,需要先「设置当前工作目录」、「设置系統中文文字编码」、 以及「设置绘图物件中的中文文字」等项,以下是一些操作范例。
#呈现code 与output
knitr::opts_chunk$set(echo = TRUE)
#设定当前工作目录(请选择一个你自己的工作目录)
setwd("/Users/simonfair/Desktop/闽南师范大学/量化培训班/(4)20230326")
#(或菜單點選)session->set working directory->choose directory
#显示目前工作目录
getwd()
## [1] "/Users/simonfair/Desktop/闽南师范大学/量化培训班/(4)20230326"
#设定系統中文文字編碼 (mac/win)
Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8") #美式英文
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/zh_CN.UTF-8"
Sys.setlocale(category = "LC_ALL", locale = "Zh_TW.UTF-8") #繁体中文
## [1] "Zh_TW.UTF-8/Zh_TW.UTF-8/Zh_TW.UTF-8/C/Zh_TW.UTF-8/zh_CN.UTF-8"
Sys.setlocale(category = "LC_ALL", locale = "zh_CN.UTF-8") #简体中文
## [1] "zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8"
#查看目前的系统编码
Sys.getlocale() #zh_CN.UTF-8/
## [1] "zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8"
#载入showtext套件
library(showtext)
## 载入需要的程辑包:sysfonts
## 载入需要的程辑包:showtextdb
#使绘图物件中的中文文字能正确呈现
showtext_auto(enable = TRUE)
#参照讲义:量化资料分析p.204
1+3+5+7+9 #25
## [1] 25
(1+3+5+7+9)/5 #5
## [1] 5
(1-5)^2+(3-5)^2+(5-5)^2+(7-5)^2+(9-5)^2 #40
## [1] 40
5-1 #4
## [1] 4
40/4 #10 (方差)
## [1] 10
sqrt(10) #3.16(标准差)
## [1] 3.162278
R是一个开放软件,进行数据分析时需要仰赖各方人士所开发的”套件”(packages), 这些套件需要「下载安装」(install.packages)并进行「调用」(library)。 如同手机的APP,需先下载到手机中,待需要用到时再开启该套件。
R内建套件:base, stats, graphics, utils 本次练习所需下载套件: “haven”, “readxl”, sjlabelled”, “sjPlot”, “sjmisc”, “sjstats”, “dplyr”
要导入Excel数据档(档名:stfoodEx.xlsx), 需先下载”readxl”套件:install.packages(“readxl”) 再调用”readxl”套件: library(readxl) 然后再透过函数:read_excel 将Excel数据档汇入到R软件:stfoodEx.xlsx <- read_excel(“stfoodEx.xlsx”) (数据檔和R程序代码檔,都要放在同一个目录下)
#下载"readxl"套件
#install.packages("readxl")
#调用"readx1" 套件
library(readxl)
#将excel数据汇入到R
stfoodEx.xlsx <- read_excel("stfoodEx.xlsx")
#(或菜單點選)Environment->Import Dataset->from Excel->Browse->import
#检视数据
View(stfoodEx.xlsx)
接下来,可以下载并调用”sjPlot”套件,使用”view_df”函数及一些指令,呈现该数据的编码状况(coding book)。
#呈现编码簿(sjPlot::view_df)
#install.packages("sjPlot")
#调用"sjPlot"套件
library(sjPlot)
## #refugeeswelcome
view_df(stfoodEx.xlsx, #指明R资料档的档案名称
show.na = TRUE, #呈现缺失值
show.frq = TRUE, #呈现频数分布
show.prc = TRUE) #呈现百分比
ID | Name | Label | missings | Values | Value Labels | Freq. | % |
---|---|---|---|---|---|---|---|
1 | Q1 | 0 (0.00%) | range: 1-2 | ||||
2 | Q2 | 0 (0.00%) | range: 1-4 | ||||
3 | Q3 | 0 (0.00%) | range: 1-6 | ||||
4 | Q5 | 0 (0.00%) | range: 1-5 | ||||
5 | Q7_1 | 0 (0.00%) | range: 0-1 | ||||
6 | Q7_2 | 0 (0.00%) | range: 0-1 | ||||
7 | Q7_3 | 0 (0.00%) | range: 0-1 | ||||
8 | Q7_4 | 0 (0.00%) | range: 0-1 | ||||
9 | Q7_5 | 0 (0.00%) | range: 0-1 | ||||
10 | Q7_6 | 0 (0.00%) | range: 0-1 | ||||
11 | Q14 | 0 (0.00%) | range: 1-5 |
#目前没有任何标签
从外部数据汇进R的档案(如Excel档案)大部分都只有变量的数值代码,但没有变量的标签说明 (variable label),也没有变量值的标签说明(value label),所以需要研究者进一步设置。
我们可以调用 “sjlabelled”套件的”set label()“函数进行”变量”标签的设置; “set labels()” 函数, 进行”变量值”标签的设置。 具体语法例示如下:
#调用sjlabelled套件
library(sjlabelled)
#增加变量标签(set_label)与变量值标签(set_labels)
#Q1
stfoodEx.xlsx$Q1 <- set_label(stfoodEx.xlsx$Q1,
label = "Q1请问您的性别")
stfoodEx.xlsx$Q1 <- set_labels(stfoodEx.xlsx$Q1,
labels = c("男", "女"))
#Q2
stfoodEx.xlsx$Q2 <- set_label(stfoodEx.xlsx$Q2,
label = "Q2请问您是大几的学生")
stfoodEx.xlsx$Q2 <- set_labels(stfoodEx.xlsx$Q2,
labels = c("大一", "大二", "大三", "大四"))
#Q3
stfoodEx.xlsx$Q3 <- set_label(stfoodEx.xlsx$Q3,
label = "Q3请问您目前就读的专业")
stfoodEx.xlsx$Q3 <- set_labels(stfoodEx.xlsx$Q3,
labels = c("新闻学", "编辑出版学", "传播学",
"网络与新媒体",
"数字媒体艺术","数字媒体技术"))
#Q5
stfoodEx.xlsx$Q5 <- set_label(stfoodEx.xlsx$Q5,
label =
"Q5平均来说,请问您一个月吃饭大概花多少钱")
stfoodEx.xlsx$Q5 <- set_labels(stfoodEx.xlsx$Q5,
labels = c("500以下", "501-1000", "1001-1500",
"1501-2000","2001以上"))
#Q7_1
stfoodEx.xlsx$Q7_1 <- set_label(stfoodEx.xlsx$Q7_1,
label = "Q7_1因为外卖节省排队时间")
#Q7_2
stfoodEx.xlsx$Q7_2 <- set_label(stfoodEx.xlsx$Q7_2,
label = "Q7_2因为外卖选择多")
#Q7_3
stfoodEx.xlsx$Q7_3 <- set_label(stfoodEx.xlsx$Q7_3,
label = "Q7_3因为食堂太挤")
#Q7_4
stfoodEx.xlsx$Q7_4 <- set_label(stfoodEx.xlsx$Q7_4,
label = "Q7_4因为有时外卖有红包拿,便宜")
#Q7_5
stfoodEx.xlsx$Q7_5 <- set_label(stfoodEx.xlsx$Q7_5,
label = "Q7_4因为想偶尔改变一下伙食")
#Q7_6
stfoodEx.xlsx$Q7_6 <- set_label(stfoodEx.xlsx$Q7_6,
label = "Q7_6其他")
#Q14
stfoodEx.xlsx$Q14 <- set_label(stfoodEx.xlsx$Q14,
label =
"Q14总体来说,对于食堂所提供的餐食服务,您满不满意")
stfoodEx.xlsx$Q14 <- set_labels(stfoodEx.xlsx$Q14,
labels = c("非常不满意", "不太满意", "一般/普通",
"还算满意", "非常满意"))
可以透过”sjlabelled”套件的”get_label()“函数查看数据中每个”变量”的标签说明, “get_labels()”函数查看每个”变量值”的标签说明。
library(sjlabelled)
get_label(stfoodEx.xlsx)
## Q1
## "Q1请问您的性别"
## Q2
## "Q2请问您是大几的学生"
## Q3
## "Q3请问您目前就读的专业"
## Q5
## "Q5平均来说,请问您一个月吃饭大概花多少钱"
## Q7_1
## "Q7_1因为外卖节省排队时间"
## Q7_2
## "Q7_2因为外卖选择多"
## Q7_3
## "Q7_3因为食堂太挤"
## Q7_4
## "Q7_4因为有时外卖有红包拿,便宜"
## Q7_5
## "Q7_4因为想偶尔改变一下伙食"
## Q7_6
## "Q7_6其他"
## Q14
## "Q14总体来说,对于食堂所提供的餐食服务,您满不满意"
get_labels(stfoodEx.xlsx)
## $Q1
## [1] "男" "女"
##
## $Q2
## [1] "大一" "大二" "大三" "大四"
##
## $Q3
## [1] "新闻学" "编辑出版学" "传播学" "网络与新媒体" "数字媒体艺术"
## [6] "数字媒体技术"
##
## $Q5
## [1] "500以下" "501-1000" "1001-1500" "1501-2000" "2001以上"
##
## $Q7_1
## NULL
##
## $Q7_2
## NULL
##
## $Q7_3
## NULL
##
## $Q7_4
## NULL
##
## $Q7_5
## NULL
##
## $Q7_6
## NULL
##
## $Q14
## [1] "非常不满意" "不太满意" "一般/普通" "还算满意" "非常满意"
将各个变量的标签及变量值的标签设置好之后, 我们可以调用”sjPlot”套件中的”view_df”函数,一次清楚呈现各个变量的名称(Names)、 变量标签(Variable Labels)、变量值(Values)、变量值标签(Value Labels)、 频数分布(Freq.)以及百分比(%)等相关资讯。 这些资讯构成了我们常说的”编码簿”(coding book)
#呈现编码簿
library(sjPlot)
view_df(stfoodEx.xlsx, #指明R资料档的档案名称
show.na = TRUE, #呈现缺失值
show.frq = TRUE, #呈现频数分布
show.prc = TRUE) #呈现百分比
ID | Name | Label | missings | Values | Value Labels | Freq. | % |
---|---|---|---|---|---|---|---|
1 | Q1 | Q1请问您的性别 | 0 (0.00%) |
1 2 |
男 女 |
415 643 |
39.22 60.78 |
2 | Q2 | Q2请问您是大几的学生 | 0 (0.00%) |
1 2 3 4 |
大一 大二 大三 大四 |
243 299 227 289 |
22.97 28.26 21.46 27.32 |
3 | Q3 | Q3请问您目前就读的专业 | 0 (0.00%) |
1 2 3 4 5 6 |
新闻学 编辑出版学 传播学 网络与新媒体 数字媒体艺术 数字媒体技术 |
166 223 288 135 215 31 |
15.69 21.08 27.22 12.76 20.32 2.93 |
4 | Q5 | Q5平均来说,请问您一个月吃饭大概花多少钱 | 0 (0.00%) |
1 2 3 4 5 |
500以下 501-1000 1001-1500 1501-2000 2001以上 |
10 136 387 418 107 |
0.95 12.85 36.58 39.51 10.11 |
5 | Q7_1 | Q7_1因为外卖节省排队时间 | 0 (0.00%) | range: 0-1 | |||
6 | Q7_2 | Q7_2因为外卖选择多 | 0 (0.00%) | range: 0-1 | |||
7 | Q7_3 | Q7_3因为食堂太挤 | 0 (0.00%) | range: 0-1 | |||
8 | Q7_4 | Q7_4因为有时外卖有红包拿,便宜 | 0 (0.00%) | range: 0-1 | |||
9 | Q7_5 | Q7_4因为想偶尔改变一下伙食 | 0 (0.00%) | range: 0-1 | |||
10 | Q7_6 | Q7_6其他 | 0 (0.00%) | range: 0-1 | |||
11 | Q14 | Q14总体来说,对于食堂所提供的餐食服务,您满不满意 | 0 (0.00%) |
1 2 3 4 5 |
非常不满意 不太满意 一般/普通 还算满意 非常满意 |
18 103 411 473 53 |
1.70 9.74 38.85 44.71 5.01 |
#此时有标签了!
变量(variable)一般可分为「类别变量」(categorical variables)(定类变量、定序变量) 与「连续变量」(numeric variables)(定距变量、定比变量)两大属性。 有关不同测量尺度的变量分类(类别变量vs.连续变量), 参考讲义p.195 表11-2
R对于变量的属性设置是很敏感的,关系到不同属性的变量会适用到 各自不同的统计分析方法。因此,在进行数据分析之前,研究者需针对 所欲分析的变量,进行变量属性的设置。
我们可以透过”class()“函数,查看变量的属性。 输出如果显示”factor”代表该变量被设置为 「类别变量」, 如果显示”numeric”代表该变量被设置为「连续变量」。 也可以使用”str” 函数,同时查看变量的属性(factor vs. numeric)、 (如果是类别变量的话)分成几类 (levels)、以及变量的前几笔资料。 当数据被载入到R,如果没有做任何的设置,R会将数据中的各个变量默认为「连续变量」。
class(stfoodEx.xlsx$Q1) #"numeric"
## [1] "numeric"
class(stfoodEx.xlsx$Q7_1) #"numeric"
## [1] "numeric"
class(stfoodEx.xlsx$Q14) #"numeric"
## [1] "numeric"
str(stfoodEx.xlsx$Q1)
## num [1:1058] 2 1 2 2 1 2 2 2 2 1 ...
## - attr(*, "label")= chr "Q1请问您的性别"
## - attr(*, "labels")= Named num [1:2] 1 2
## ..- attr(*, "names")= chr [1:2] "男" "女"
str(stfoodEx.xlsx$Q7_1)
## num [1:1058] 1 0 1 1 1 1 1 0 1 0 ...
## - attr(*, "label")= chr "Q7_1因为外卖节省排队时间"
str(stfoodEx.xlsx$Q14)
## num [1:1058] 4 4 4 4 4 2 4 3 3 4 ...
## - attr(*, "label")= chr "Q14总体来说,对于食堂所提供的餐食服务,您满不满意"
## - attr(*, "labels")= Named num [1:5] 1 2 3 4 5
## ..- attr(*, "names")= chr [1:5] "非常不满意" "不太满意" "一般/普通" "还算满意" ...
假如我们要将数据中的一些变量设置为「类别变量」,则可调用”sjlabelled”套件的 “to_factor()”函数,来完成这项工作。如果要将数据中的一些变量设置为「连续变量」, 则可调用”sjlabelled”套件的”to_numeric()“函数,来完成这项工作。
library(sjlabelled)
#将numeric(连续变量)->factor(类别变量)
class(stfoodEx.xlsx$Q1) #numeric
## [1] "numeric"
library(sjlabelled)
stfoodEx.xlsx$Q1 <- to_factor(stfoodEx.xlsx$Q1)
class(stfoodEx.xlsx$Q1) #factor
## [1] "factor"
#将factor(类别变量)->numeric(连续变量)
class(stfoodEx.xlsx$Q1) #factor
## [1] "factor"
stfoodEx.xlsx$Q1 <- to_numeric(stfoodEx.xlsx$Q1)
class(stfoodEx.xlsx$Q1) #numeric
## [1] "numeric"
#将numeric(连续变量)->factor(类别变量)
stfoodEx.xlsx$Q1 <- to_factor(stfoodEx.xlsx$Q1)
class(stfoodEx.xlsx$Q1) #factor
## [1] "factor"
stfoodEx.xlsx$Q2 <- to_factor(stfoodEx.xlsx$Q2)
stfoodEx.xlsx$Q3 <- to_factor(stfoodEx.xlsx$Q3)
stfoodEx.xlsx$Q5 <- to_factor(stfoodEx.xlsx$Q5)
stfoodEx.xlsx$Q7_1 <- to_factor(stfoodEx.xlsx$Q7_1)
stfoodEx.xlsx$Q7_2 <- to_factor(stfoodEx.xlsx$Q7_2)
stfoodEx.xlsx$Q7_3 <- to_factor(stfoodEx.xlsx$Q7_3)
stfoodEx.xlsx$Q7_4 <- to_factor(stfoodEx.xlsx$Q7_4)
stfoodEx.xlsx$Q7_5 <- to_factor(stfoodEx.xlsx$Q7_5)
stfoodEx.xlsx$Q7_6 <- to_factor(stfoodEx.xlsx$Q7_6)
stfoodEx.xlsx$Q14 <- to_factor(stfoodEx.xlsx$Q14)
class(stfoodEx.xlsx$Q1) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q2) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q3) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q5) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_1) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_2) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_3) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_4) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_5) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q7_6) #factor
## [1] "factor"
class(stfoodEx.xlsx$Q14) #factor
## [1] "factor"
#将已设置好标签的数据资料,存档(*.rda)
save(stfoodEx.xlsx, file = "stfoodEx.xlsx.rda")
#载入已设置好标签的数据资料档(*.rda)
load("stfoodEx.xlsx.rda")
调用”sjmisc”套件的”frq”函数
#调用"sjmisc"套件
library(sjmisc)
#频数分布
frq(stfoodEx.xlsx$Q14)
## Q14总体来说,对于食堂所提供的餐食服务,您满不满意 (x) <categorical>
## # total N=1058 valid N=1058 mean=3.42 sd=0.80
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ---------------------------------------------------
## 1 | 非常不满意 | 18 | 1.70 | 1.70 | 1.70
## 2 | 不太满意 | 103 | 9.74 | 9.74 | 11.44
## 3 | 一般/普通 | 411 | 38.85 | 38.85 | 50.28
## 4 | 还算满意 | 473 | 44.71 | 44.71 | 94.99
## 5 | 非常满意 | 53 | 5.01 | 5.01 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
将spss数据档导入R的方法,是使用”haven”套件的”read_sav”函数。 要导入的SPSS数据档(档名:stfoodEx.sav),
#下载"haven"套件
#install.packages("haven")
#调用"haven"套件
library(haven)
##
## 载入程辑包:'haven'
## The following objects are masked from 'package:sjlabelled':
##
## as_factor, read_sas, read_spss, read_stata, write_sas, zap_labels
#将SPSS数据汇入到R
stfoodEx.sav <- read_sav("stfoodEx.sav")
#检视数据
View(stfoodEx.sav)
卸除”haven”套件 detach(“package:haven”, unload = TRUE)
detach("package:haven", unload = TRUE)
例外一个将spss数据档导入R的方法,是使用”sjlabelled”套件的”read_spss”函数。 需先下载”sjlabelled”套件:install.packages(“sjlabelled”) (如果之前有下载过,就不用再下载了) 再调用”sjlabelled”套件: library(sjlabelled) 然后再透过函数:read_spss 将spss数据档汇入到R软件:stfoodEx.sav <- read_spss(“stfoodEx.sav”) (透过sjlabelled套件将SPSS数据档汇入到R,会自动将数据档中的”类别变量”转换成”factor”)
#下载"sjlabelled"套件
#install.packages("sjlabelled")
#调用"sjlabelled" 套件
library(sjlabelled)
#将SPSS数据汇入到R
stfoodEx.sav<- read_spss("stfoodEx.sav")
## Converting atomic to factors. Please wait...
#(会自动将数据档中的"类别变量",转换成"factor")
View(stfoodEx.sav)
我们可以使用”base”套件中的一些函数,来查看R数据档中的相关资讯。 可以使用”head()“函数,呈现使用中R数据资料档的前六笔资料; 或使用”tail()“函数,呈现后六笔资料。 使用”names()“函数,查看R数据料档中所有变量的变量名称。 使用”nrow()“函数,查看R数据料档中有几行(多少个案数)。 使用”ncol()“函数,查看R数据料档中有几列(多少个变量数)。 使用”dim()“函数,查看使用中的R数据资料档包含了几笔资料、几个变量。 使用”View()“函数,可以在RStudio开启另外一个小窗口,检视使用中数据所有的变量与个案。
#查看R数据檔中的資料
#看前六笔资料(head)
head(stfoodEx.sav)
## Q1 Q2 Q3 Q5 Q7_1 Q7_2 Q7_3 Q7_4 Q7_5 Q7_6 Q14 sex class2 dep4 f1
## 1 2 2 4 3 1 0 1 1 0 0 4 2 1 2 1.2467105
## 2 1 2 4 3 0 1 1 0 1 0 4 1 1 2 0.6173469
## 3 2 3 3 4 1 0 0 1 1 0 4 2 2 2 1.2467105
## 4 2 2 4 2 1 0 1 0 1 0 4 2 1 2 1.2467105
## 5 1 2 4 4 1 1 0 0 1 0 4 1 1 2 0.6173469
## 6 2 2 4 5 1 1 0 0 1 0 2 2 1 2 1.2467105
## w1 f2 w2 f3 w3 f4 w4
## 1 1.2467105 0.9860279 1.2292914 0.997449 1.2586182 1.0160858 1.2179168
## 2 0.6173469 0.9860279 0.6087213 0.997449 0.5843983 0.9527559 0.5654999
## 3 1.2467105 1.0140281 1.2641995 0.997449 1.2687215 1.0160858 1.2525018
## 4 1.2467105 0.9860279 1.2292914 0.997449 1.2586182 1.0160858 1.2179168
## 5 0.6173469 0.9860279 0.6087213 0.997449 0.5843983 0.9527559 0.5654999
## 6 1.2467105 0.9860279 1.2292914 0.997449 1.2586182 1.0160858 1.2179168
## f5 w5 f6 w6 w_adj w_rake1 w_rake2 w_rake3
## 1 1.0102249 1.2303699 1 1.2272312 1.229556 1.2472224 1.2297672 1.2321319
## 2 1.0102249 0.5712821 1 0.5698248 0.570904 0.6169542 0.6095869 0.5720887
## 3 0.9902153 1.2402464 1 1.2370825 1.239425 1.2472224 1.2634720 1.2393676
## 4 1.0102249 1.2303699 1 1.2272312 1.229556 1.2472224 1.2297672 1.2321319
## 5 1.0102249 0.5712821 1 0.5698248 0.570904 0.6169542 0.6095869 0.5720887
## 6 1.0102249 1.2303699 1 1.2272312 1.229556 1.2472224 1.2297672 1.2321319
## w_rak_fin
## 1 1.2321319
## 2 0.5720887
## 3 1.2393676
## 4 1.2321319
## 5 0.5720887
## 6 1.2321319
#看后六笔资料(tail)
tail(stfoodEx.sav)
## Q1 Q2 Q3 Q5 Q7_1 Q7_2 Q7_3 Q7_4 Q7_5 Q7_6 Q14 sex class2 dep4 f1
## 1053 2 3 1 2 1 1 0 0 0 0 4 2 2 1 1.2467105
## 1054 2 3 1 3 1 0 1 0 0 0 3 2 2 1 1.2467105
## 1055 2 3 1 3 1 1 0 0 1 0 4 2 2 1 1.2467105
## 1056 2 3 1 2 1 0 0 0 0 0 2 2 2 1 1.2467105
## 1057 1 4 5 5 1 0 1 1 0 0 4 1 2 3 0.6173469
## 1058 1 4 5 5 0 1 1 1 0 0 4 1 2 3 0.6173469
## w1 f2 w2 f3 w3 f4 w4
## 1053 1.2467105 1.014028 1.2641995 0.7937337 0.9286510 1.0160858 1.0195788
## 1054 1.2467105 1.014028 1.2641995 0.7937337 0.9286510 1.0160858 1.0195788
## 1055 1.2467105 1.014028 1.2641995 0.7937337 0.9286510 1.0160858 1.0195788
## 1056 1.2467105 1.014028 1.2641995 0.7937337 0.9286510 1.0160858 1.0195788
## 1057 0.6173469 1.014028 0.6260071 1.0035971 0.5927205 0.9527559 0.8804472
## 1058 0.6173469 1.014028 0.6260071 1.0035971 0.5927205 0.9527559 0.8804472
## f5 w5 f6 w6 w_adj w_rake1 w_rake2
## 1053 0.9902153 1.0096025 0.9198185 1.0062923 1.0081981 1.2472224 1.2634720
## 1054 0.9902153 1.0096025 0.9198185 1.0062923 1.0081981 1.2472224 1.2634720
## 1055 0.9902153 1.0096025 0.9198185 1.0062923 1.0081981 1.2472224 1.2634720
## 1056 0.9902153 1.0096025 0.9198185 1.0062923 1.0081981 1.2472224 1.2634720
## 1057 0.9902153 0.8718323 1.0000000 0.8749683 0.8766255 0.6169542 0.6262942
## 1058 0.9902153 0.8718323 1.0000000 0.8749683 0.8766255 0.6169542 0.6262942
## w_rake3 w_rak_fin
## 1053 1.0075228 1.0075228
## 1054 1.0075228 1.0075228
## 1055 1.0075228 1.0075228
## 1056 1.0075228 1.0075228
## 1057 0.8752809 0.8752809
## 1058 0.8752809 0.8752809
#看数据档中所有的变量名称(names)
names(stfoodEx.sav)
## [1] "Q1" "Q2" "Q3" "Q5" "Q7_1" "Q7_2"
## [7] "Q7_3" "Q7_4" "Q7_5" "Q7_6" "Q14" "sex"
## [13] "class2" "dep4" "f1" "w1" "f2" "w2"
## [19] "f3" "w3" "f4" "w4" "f5" "w5"
## [25] "f6" "w6" "w_adj" "w_rake1" "w_rake2" "w_rake3"
## [31] "w_rak_fin"
#看有几行(nrow)
nrow(stfoodEx.sav) #1058
## [1] 1058
#看有几列(ncol)
ncol(stfoodEx.sav) #31
## [1] 31
#看数据档中包含了几笔资料,几个变量(dim)
dim(stfoodEx.sav) #1058 31
## [1] 1058 31
#检视数据(View)
View(stfoodEx.sav)
#呈现编码簿与频数分布(原始未加权)
library(sjPlot)
view_df(stfoodEx.sav, #指明R资料档的档案名称
show.na = TRUE, #呈现缺失值
show.frq = TRUE, #呈现频数分布
show.prc = TRUE) #呈现百分比
ID | Name | Label | missings | Values | Value Labels | Freq. | % |
---|---|---|---|---|---|---|---|
1 | Q1 | 1.请问您的性别是? | 0 (0.00%) |
1 2 |
男 女 |
415 643 |
39.22 60.78 |
2 | Q2 |
|
0 (0.00%) |
1 2 3 4 |
大一 大二 大三 大四 |
243 299 227 289 |
22.97 28.26 21.46 27.32 |
3 | Q3 |
|
0 (0.00%) |
1 2 3 4 5 6 |
新闻学 编辑出版学 传播学 网络与新媒体 数字媒体艺术 数字媒体技术 |
166 223 288 135 215 31 |
15.69 21.08 27.22 12.76 20.32 2.93 |
4 | Q5 |
|
0 (0.00%) |
1 2 3 4 5 |
01.500以下 02.501-1000 03.1001-1500 04.1501-2000 05.2001以上 |
10 136 387 418 107 |
0.95 12.85 36.58 39.51 10.11 |
5 | Q7_1 | Q7_1.因为外卖节省排队时间 | 0 (0.00%) |
0 1 |
no yes |
543 515 |
51.32 48.68 |
6 | Q7_2 | Q7_2.因为外卖选择多 | 0 (0.00%) |
0 1 |
no yes |
573 485 |
54.16 45.84 |
7 | Q7_3 | Q7_3.因为食堂太挤 | 0 (0.00%) |
0 1 |
no yes |
539 519 |
50.95 49.05 |
8 | Q7_4 | Q7_4.因为有时外卖有红包拿,便宜 | 0 (0.00%) |
0 1 |
no yes |
609 449 |
57.56 42.44 |
9 | Q7_5 | Q7_5.因为想偶尔改变一下伙食 | 0 (0.00%) |
0 1 |
no yes |
580 478 |
54.82 45.18 |
10 | Q7_6 | Q7_6.其他 | 0 (0.00%) |
0 1 |
no yes |
881 177 |
83.27 16.73 |
11 | Q14 | 14.总体来说,对于食堂所提供的餐食服务,您满不满意? | 0 (0.00%) |
1 2 3 4 5 |
非常不满意 不太满意 一般 还算满意 非常满意 |
18 103 411 473 53 |
1.70 9.74 38.85 44.71 5.01 |
12 | sex | 性别 | 0 (0.00%) |
1 2 |
男 女 |
415 643 |
39.22 60.78 |
13 | class2 | 年级 | 0 (0.00%) |
1 2 |
大一+大二 大三+大四 |
542 516 |
51.23 48.77 |
14 | dep4 | 学系 | 0 (0.00%) |
1 2 3 4 |
新闻 传媒 设计 智能媒体 |
389 423 215 31 |
36.77 39.98 20.32 2.93 |
15 | f1 | 0 (0.00%) | range: 0.6-1.2 | ||||
16 | w1 | 0 (0.00%) | range: 0.6-1.2 | ||||
17 | f2 | 0 (0.00%) | range: 1.0-1.0 | ||||
18 | w2 | 0 (0.00%) | range: 0.6-1.3 | ||||
19 | f3 | 0 (0.00%) | range: 0.8-1.0 | ||||
20 | w3 | 0 (0.00%) | range: 0.4-1.3 | ||||
21 | f4 | 0 (0.00%) | range: 1.0-1.0 | ||||
22 | w4 | 0 (0.00%) | range: 0.5-1.9 | ||||
23 | f5 | 0 (0.00%) | range: 1.0-1.0 | ||||
24 | w5 | 0 (0.00%) | range: 0.5-1.9 | ||||
25 | f6 | 0 (0.00%) | range: 0.9-1.0 | ||||
26 | w6 | 0 (0.00%) | range: 0.5-1.9 | ||||
27 | w_adj | 0 (0.00%) | range: 0.5-1.9 | ||||
28 | w_rake1 | 性别加权 | 0 (0.00%) | range: 0.6-1.2 | |||
29 | w_rake2 | 性别*年级加权 | 0 (0.00%) | range: 0.6-1.3 | |||
30 | w_rake3 | 性别年级学系加权 | 0 (0.00%) | range: 0.5-1.9 | |||
31 | w_rak_fin | Raked Weight | 0 (0.00%) | range: 0.5-1.9 |
在设置完成变量标签与变量值标签之后,我们可以先做个变量的频数分布。 在R的基本函数中,可以使用”table()“函数,呈现变量的频数; 使用prop.table(table())函数,呈现变量各个数值的比例(百分比)。
table(stfoodEx.sav$Q14) #呈现频数
##
## 1 2 3 4 5
## 18 103 411 473 53
prop.table(table(stfoodEx.sav$Q1)) #呈现比例(百分比)
##
## 1 2
## 0.3922495 0.6077505
我们可以进一步调用”sjmisc”套件的”frq”函数, 以呈现比较精美且符合学术要求的频数分布表。 “frq”函数有个选项”out”,如果都不设置,则频数分布结果会以纯文字形式 (txt)呈现在RStudio的Console视窗; 如果将out选项设置为out=“browser” or out= “b”, 则频数分布结果会以使用者预设的浏览器开启; 如果将out选项设置为out=“viewer” or out= “v”, 则频数分布结果会呈现在RStudio的Viewer视窗
#调用sjmisc套件
library(sjmisc)
#频数分布(frq)
#频数分布结果以纯文字形式呈现在RStudio的Console视窗
frq(stfoodEx.sav$Q14)
## 14.总体来说,对于食堂所提供的餐食服务,您满不满意? (x) <categorical>
## # total N=1058 valid N=1058 mean=3.42 sd=0.80
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ---------------------------------------------------
## 1 | 非常不满意 | 18 | 1.70 | 1.70 | 1.70
## 2 | 不太满意 | 103 | 9.74 | 9.74 | 11.44
## 3 | 一般 | 411 | 38.85 | 38.85 | 50.28
## 4 | 还算满意 | 473 | 44.71 | 44.71 | 94.99
## 5 | 非常满意 | 53 | 5.01 | 5.01 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
#频数分布结果以使用者预设的浏览器开启
frq(stfoodEx.sav$Q14, out = "browser")
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 非常不满意 | 18 | 1.70 | 1.70 | 1.70 | |
2 | 不太满意 | 103 | 9.74 | 9.74 | 11.44 | |
3 | 一般 | 411 | 38.85 | 38.85 | 50.28 | |
4 | 还算满意 | 473 | 44.71 | 44.71 | 94.99 | |
5 | 非常满意 | 53 | 5.01 | 5.01 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=3.42 · σ=0.80 |
#频数分布结果呈现在RStudio的Viewer视窗
frq(stfoodEx.sav$Q14, out = "viewer")
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 非常不满意 | 18 | 1.70 | 1.70 | 1.70 | |
2 | 不太满意 | 103 | 9.74 | 9.74 | 11.44 | |
3 | 一般 | 411 | 38.85 | 38.85 | 50.28 | |
4 | 还算满意 | 473 | 44.71 | 44.71 | 94.99 | |
5 | 非常满意 | 53 | 5.01 | 5.01 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=3.42 · σ=0.80 |
#升幂
frq(stfoodEx.sav$Q14, sort.frq=c("asc"),out="v") # html on Viewer
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 非常不满意 | 18 | 1.70 | 1.70 | 1.70 | |
5 | 非常满意 | 53 | 5.01 | 5.01 | 6.71 | |
2 | 不太满意 | 103 | 9.74 | 9.74 | 16.45 | |
3 | 一般 | 411 | 38.85 | 38.85 | 55.29 | |
4 | 还算满意 | 473 | 44.71 | 44.71 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=3.42 · σ=0.80 |
#降幂
frq(stfoodEx.sav$Q14, sort.frq=c("desc"),out="v") # html on Viewer
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
4 | 还算满意 | 473 | 44.71 | 44.71 | 44.71 | |
3 | 一般 | 411 | 38.85 | 38.85 | 83.55 | |
2 | 不太满意 | 103 | 9.74 | 9.74 | 93.29 | |
5 | 非常满意 | 53 | 5.01 | 5.01 | 98.30 | |
1 | 非常不满意 | 18 | 1.70 | 1.70 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=3.42 · σ=0.80 |
以frq(…, out=“viewer”)所产生的频数分布表为例, “val”是value的缩写,数值代码之意。 “label”为变量标签之意。 “frq”是frequencies的缩写,频数之意。 “raw.prc”是raw percent的缩写,原始百分比之意(包含缺失值个案在内 的百分比)。 “valid.prc”是valid percent的缩写, 有效百分比之意(扣除缺失值个案后的百分比)。 “cum.prc”是cumulative percent的缩写,累积有效百分比之意。 “NA” 是Not Available的缩写,遗漏值或缺失值之意。
要呈现加权后的频数分布,必须在sjmisc::frq后, 加上一个”weights=数据档名称$加权变量名称”。
#加权后频数分布
#讲义p.198 表11-10
library(sjmisc)
frq(stfoodEx.sav$Q14,weights=stfoodEx.sav$w_rak_fin) # plain text on console
## 14.总体来说,对于食堂所提供的餐食服务,您满不满意? (xw) <categorical>
## # total N=1058 valid N=1058 mean=3.42 sd=0.79
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ---------------------------------------------------
## 1 | 非常不满意 | 15 | 1.42 | 1.42 | 1.42
## 2 | 不太满意 | 104 | 9.83 | 9.83 | 11.25
## 3 | 一般 | 416 | 39.32 | 39.32 | 50.57
## 4 | 还算满意 | 472 | 44.61 | 44.61 | 95.18
## 5 | 非常满意 | 51 | 4.82 | 4.82 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
frq(stfoodEx.sav$Q14, weights=stfoodEx.sav$w_rak_fin,out="v") # html on Viewer
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 非常不满意 | 15 | 1.42 | 1.42 | 1.42 | |
2 | 不太满意 | 104 | 9.83 | 9.83 | 11.25 | |
3 | 一般 | 416 | 39.32 | 39.32 | 50.57 | |
4 | 还算满意 | 472 | 44.61 | 44.61 | 95.18 | |
5 | 非常满意 | 51 | 4.82 | 4.82 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=3.42 · σ=0.79 |
对于spss数据资料而言,一般来说研究者通常会在SPSS中将各个变量(值)的 标签事先设置好,所以在汇入外部数据时,如果汇入的是SPSS数据, 则通常可以不用再在R环境去设置各个变量(值)的标签, 直接调用”sjmisc”套件的”frq”函数,就可以呈现带有标签说明的 频数分布表了。
在sjPlot::view_df后,增加一个”weight.by=加权变量名称”, 就可以呈现加权后频数分布的编码簿了。
#呈现编码簿与频数分布(未加权+加权)
library(sjPlot)
view_df(stfoodEx.sav, #指明R资料档的档案名称
weight.by = w_rak_fin, #设置加权变量
show.na = TRUE, #呈现缺失值
show.frq = TRUE, #呈现频数分布
show.prc = TRUE, #呈现百分比
show.wtd.frq=TRUE,#呈现加权频数分布
show.wtd.prc=TRUE) #呈现加权百分比
ID | Name | Label | missings | Values | Value Labels | Freq. | % | weighted Freq. | weighted % |
---|---|---|---|---|---|---|---|---|---|
1 | Q1 | 1.请问您的性别是? | 0 (0.00%) |
1 2 |
男 女 |
415 643 |
39.22 60.78 |
256 802 |
24.20 75.80 |
2 | Q2 |
|
0 (0.00%) |
1 2 3 4 |
大一 大二 大三 大四 |
243 299 227 289 |
22.97 28.26 21.46 27.32 |
203 320 244 292 |
19.17 30.22 23.04 27.57 |
3 | Q3 |
|
0 (0.00%) |
1 2 3 4 5 6 |
新闻学 编辑出版学 传播学 网络与新媒体 数字媒体艺术 数字媒体技术 |
166 223 288 135 215 31 |
15.69 21.08 27.22 12.76 20.32 2.93 |
135 187 282 132 295 26 |
12.77 17.69 26.68 12.49 27.91 2.46 |
4 | Q5 |
|
0 (0.00%) |
1 2 3 4 5 |
01.500以下 02.501-1000 03.1001-1500 04.1501-2000 05.2001以上 |
10 136 387 418 107 |
0.95 12.85 36.58 39.51 10.11 |
12 137 395 412 103 |
1.13 12.94 37.30 38.90 9.73 |
5 | Q7_1 | Q7_1.因为外卖节省排队时间 | 0 (0.00%) |
0 1 |
no yes |
543 515 |
51.32 48.68 |
530 528 |
50.09 49.91 |
6 | Q7_2 | Q7_2.因为外卖选择多 | 0 (0.00%) |
0 1 |
no yes |
573 485 |
54.16 45.84 |
573 485 |
54.16 45.84 |
7 | Q7_3 | Q7_3.因为食堂太挤 | 0 (0.00%) |
0 1 |
no yes |
539 519 |
50.95 49.05 |
531 527 |
50.19 49.81 |
8 | Q7_4 | Q7_4.因为有时外卖有红包拿,便宜 | 0 (0.00%) |
0 1 |
no yes |
609 449 |
57.56 42.44 |
609 449 |
57.56 42.44 |
9 | Q7_5 | Q7_5.因为想偶尔改变一下伙食 | 0 (0.00%) |
0 1 |
no yes |
580 478 |
54.82 45.18 |
568 490 |
53.69 46.31 |
10 | Q7_6 | Q7_6.其他 | 0 (0.00%) |
0 1 |
no yes |
881 177 |
83.27 16.73 |
866 192 |
81.85 18.15 |
11 | Q14 | 14.总体来说,对于食堂所提供的餐食服务,您满不满意? | 0 (0.00%) |
1 2 3 4 5 |
非常不满意 不太满意 一般 还算满意 非常满意 |
18 103 411 473 53 |
1.70 9.74 38.85 44.71 5.01 |
15 104 416 472 51 |
1.42 9.83 39.32 44.61 4.82 |
12 | sex | 性别 | 0 (0.00%) |
1 2 |
男 女 |
415 643 |
39.22 60.78 |
256 802 |
24.20 75.80 |
13 | class2 | 年级 | 0 (0.00%) |
1 2 |
大一+大二 大三+大四 |
542 516 |
51.23 48.77 |
523 535 |
49.43 50.57 |
14 | dep4 | 学系 | 0 (0.00%) |
1 2 3 4 |
新闻 传媒 设计 智能媒体 |
389 423 215 31 |
36.77 39.98 20.32 2.93 |
322 414 295 26 |
30.46 39.17 27.91 2.46 |
15 | f1 | 0 (0.00%) | range: 0.6-1.2 | ||||||
16 | w1 | 0 (0.00%) | range: 0.6-1.2 | ||||||
17 | f2 | 0 (0.00%) | range: 1.0-1.0 | ||||||
18 | w2 | 0 (0.00%) | range: 0.6-1.3 | ||||||
19 | f3 | 0 (0.00%) | range: 0.8-1.0 | ||||||
20 | w3 | 0 (0.00%) | range: 0.4-1.3 | ||||||
21 | f4 | 0 (0.00%) | range: 1.0-1.0 | ||||||
22 | w4 | 0 (0.00%) | range: 0.5-1.9 | ||||||
23 | f5 | 0 (0.00%) | range: 1.0-1.0 | ||||||
24 | w5 | 0 (0.00%) | range: 0.5-1.9 | ||||||
25 | f6 | 0 (0.00%) | range: 0.9-1.0 | ||||||
26 | w6 | 0 (0.00%) | range: 0.5-1.9 | ||||||
27 | w_adj | 0 (0.00%) | range: 0.5-1.9 | ||||||
28 | w_rake1 | 性别加权 | 0 (0.00%) | range: 0.6-1.2 | |||||
29 | w_rake2 | 性别*年级加权 | 0 (0.00%) | range: 0.6-1.3 | |||||
30 | w_rake3 | 性别年级学系加权 | 0 (0.00%) | range: 0.5-1.9 | |||||
31 | w_rak_fin | Raked Weight | 0 (0.00%) | range: 0.5-1.9 |
多选题的频数分布,要先计算多选题中每一题的「总反应次数」, 以及「全部样本数」。 之后再制作一个数据框(data.frame)将各题反应次数、总反应次数、 以及总样本数等三项资讯,统合成三个变量。 然后再计算两种百分比:一是以「总反应次数」为分母的百分比: 另一是以「总样本数」为分母的百分比。 具体程序语法示例如下:
## 多选题
#呈现多选题各题的加权后次数分布
library(sjmisc)
frq(stfoodEx.sav, Q7_1:Q7_6, weights = stfoodEx.sav$w_rak_fin) #加权后
## Q7_1.因为外卖节省排队时间 (Q7_1) <categorical>
## # total N=1058 valid N=1058 mean=0.50 sd=0.50
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 530 | 50.09 | 50.09 | 50.09
## 1 | yes | 528 | 49.91 | 49.91 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
##
## Q7_2.因为外卖选择多 (Q7_2) <categorical>
## # total N=1058 valid N=1058 mean=0.46 sd=0.50
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 573 | 54.16 | 54.16 | 54.16
## 1 | yes | 485 | 45.84 | 45.84 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
##
## Q7_3.因为食堂太挤 (Q7_3) <categorical>
## # total N=1058 valid N=1058 mean=0.50 sd=0.50
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 531 | 50.19 | 50.19 | 50.19
## 1 | yes | 527 | 49.81 | 49.81 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
##
## Q7_4.因为有时外卖有红包拿,便宜 (Q7_4) <categorical>
## # total N=1058 valid N=1058 mean=0.42 sd=0.49
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 609 | 57.56 | 57.56 | 57.56
## 1 | yes | 449 | 42.44 | 42.44 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
##
## Q7_5.因为想偶尔改变一下伙食 (Q7_5) <categorical>
## # total N=1058 valid N=1058 mean=0.46 sd=0.50
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 568 | 53.69 | 53.69 | 53.69
## 1 | yes | 490 | 46.31 | 46.31 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
##
## Q7_6.其他 (Q7_6) <categorical>
## # total N=1058 valid N=1058 mean=0.18 sd=0.39
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 0 | no | 866 | 81.85 | 81.85 | 81.85
## 1 | yes | 192 | 18.15 | 18.15 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
#计算总反应次数
528+485+527+449+490+192 #r=2671
## [1] 2671
#全部样本数n=1058
#制作数据框data frame
mydata<-data.frame(
x1=c(528, 485, 527, 449, 490, 192),
n=c(1058,1058,1058,1058,1058,1058),
r=c(2671,2671,2671,2671,2671,2671)
)
View(mydata)
#制作新变量
#下载套件("dplyr")
#install.packages("dplyr")
#调用套件("dplyr")
library(dplyr)
##
## 载入程辑包:'dplyr'
## The following object is masked from 'package:sjlabelled':
##
## as_label
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
#以加权反应次数2671為计算基础的百分比(总和=100%)
#函数"mutate",产生新变量
mydata.r<-mutate(mydata, percent.responses=(x1/r)*100)
mydata.r
## x1 n r percent.responses
## 1 528 1058 2671 19.767877
## 2 485 1058 2671 18.157993
## 3 527 1058 2671 19.730438
## 4 449 1058 2671 16.810183
## 5 490 1058 2671 18.345189
## 6 192 1058 2671 7.188319
#以加权后样本个案数1058為计算基础的百分比(总和不等于100%)
mydata.n<-mutate(mydata, percent.cases=(x1/n)*100)
mydata.n
## x1 n r percent.cases
## 1 528 1058 2671 49.90548
## 2 485 1058 2671 45.84121
## 3 527 1058 2671 49.81096
## 4 449 1058 2671 42.43856
## 5 490 1058 2671 46.31380
## 6 192 1058 2671 18.14745
调用”stats”套件的”chisq.test(table())“函数,并设置分析变量、 分析变量母体比例。 如果x-squared所对应的p值<0.05,则该样本变量不具代表性。
#未加权
#original data原始样本代表检定 for given probabilities: chisq.test
frq(stfoodEx.sav$sex)
## 性别 (x) <categorical>
## # total N=1058 valid N=1058 mean=1.61 sd=0.49
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ----------------------------------------------
## 1 | 男 | 415 | 39.22 | 39.22 | 39.22
## 2 | 女 | 643 | 60.78 | 60.78 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
#library(stats)
#讲义p.197 表11-3~表11-5
chisq.test(table(stfoodEx.sav$sex),p = c(.242, .758)) #p.000
##
## Chi-squared test for given probabilities
##
## data: table(stfoodEx.sav$sex)
## X-squared = 130.2, df = 1, p-value < 2.2e-16
chisq.test(table(stfoodEx.sav$class2),p = c(.494, .506)) #p.0.2341
##
## Chi-squared test for given probabilities
##
## data: table(stfoodEx.sav$class2)
## X-squared = 1.4155, df = 1, p-value = 0.2341
chisq.test(table(stfoodEx.sav$dep4),p = c(.305, .391, .279, .025)) #p.0.000
##
## Chi-squared test for given probabilities
##
## data: table(stfoodEx.sav$dep4)
## X-squared = 36.399, df = 3, p-value = 6.166e-08
调用”sjstats”套件的”weighted_chisqtest()“函数,并设置分析变量、加权变量、 及分析变量母体比例。如果x-squared所对应的p>0.05,则该样本变量具代表性
#加权
#weighted data加权样本代表检定
#for given probabilities:weighted_chisqtest
#下载套件("sjstats")
#install.packages("sjstats")
#调用套件("sjstats")
library(sjstats)
#讲义p.198 表11-6~表11-8
weighted_chisqtest(sex ~w_rak_fin, stfoodEx.sav, p=c(.242, .758))
##
## # Weighted chi-squared test for given probabilities
##
## Chi-squared: 0.0000
## df: 1
## p-value: > .999
## Observations: 1058
weighted_chisqtest(class2 ~w_rak_fin, stfoodEx.sav,
p=c(.494, .506))
##
## # Weighted chi-squared test for given probabilities
##
## Chi-squared: 0.0000
## df: 1
## p-value: > .999
## Observations: 1058
weighted_chisqtest(dep4 ~w_rak_fin, stfoodEx.sav,
p=c(.305, .391, .279, .025))
##
## # Weighted chi-squared test for given probabilities
##
## Chi-squared: 0.0024
## df: 3
## p-value: > .999
## Observations: 1058
调用”sjmisc”套件中的”frq”函数, 并加上”weights=数据档名称$加权变量名称”
#加权后频数分布(weights=)
library(sjmisc)
frq(stfoodEx.sav$sex,weights=stfoodEx.sav$w_rak_fin, out="v")
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 男 | 256 | 24.20 | 24.20 | 24.20 | |
2 | 女 | 802 | 75.80 | 75.80 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=1.76 · σ=0.43 |
# html on Viewer
frq(stfoodEx.sav$class2,weights=stfoodEx.sav$w_rak_fin, out="v")
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 大一+大二 | 523 | 49.43 | 49.43 | 49.43 | |
2 | 大三+大四 | 535 | 50.57 | 50.57 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1058 · valid N=1058 · x̄=1.51 · σ=0.50 |
# html on Viewer
frq(stfoodEx.sav$dep4,weights=stfoodEx.sav$w_rak_fin, out="v")
val | label | frq | raw.prc | valid.prc | cum.prc | |
---|---|---|---|---|---|---|
1 | 新闻 | 322 | 30.46 | 30.46 | 30.46 | |
2 | 传媒 | 414 | 39.17 | 39.17 | 69.63 | |
3 | 设计 | 295 | 27.91 | 27.91 | 97.54 | |
4 | 智能媒体 | 26 | 2.46 | 2.46 | 100.00 | |
NA | NA | 0 | 0.00 | NA | NA | |
total N=1057 · valid N=1057 · x̄=2.03 · σ=0.83 |
# html on Viewer
调用”sjPlot”套件中的”plot_frq”函数,并加上type=“bar”指令, 如果是要呈现加权后图形, 另外还要加上”weight.by=加权数据档名称$加权变量名称”
## 条形图 sjPlot::plot_frq(x,type=“bar”); sjPlot::plot_frq(x,type=“bar”, weight.by=)
library(sjPlot)
plot_frq(stfoodEx.sav$Q14,type="bar") #原始未加权
plot_frq(stfoodEx.sav$Q14,type="bar",
weight.by=stfoodEx.sav$w_rak_fin)#加权后(weight.by=)
## 饼图 base::pie(x)
table(stfoodEx.sav$Q14) #未加权
##
## 1 2 3 4 5
## 18 103 411 473 53
prop.table(table(stfoodEx.sav$Q14))#未加权
##
## 1 2 3 4 5
## 0.01701323 0.09735350 0.38846881 0.44706994 0.05009452
#加权后频数分布(weights=)
library(sjmisc)
frq(stfoodEx.sav$Q14, weights = stfoodEx.sav$w_rak_fin) #呈現频数分布(加权后)
## 14.总体来说,对于食堂所提供的餐食服务,您满不满意? (xw) <categorical>
## # total N=1058 valid N=1058 mean=3.42 sd=0.79
##
## Value | Label | N | Raw % | Valid % | Cum. %
## ---------------------------------------------------
## 1 | 非常不满意 | 15 | 1.42 | 1.42 | 1.42
## 2 | 不太满意 | 104 | 9.83 | 9.83 | 11.25
## 3 | 一般 | 416 | 39.32 | 39.32 | 50.57
## 4 | 还算满意 | 472 | 44.61 | 44.61 | 95.18
## 5 | 非常满意 | 51 | 4.82 | 4.82 | 100.00
## <NA> | <NA> | 0 | 0.00 | <NA> | <NA>
#產生一個向量变量:slice.pct, 并依次输入数据(百分比)
slice.pct <- c(1.42,9.83,39.32,44.61, 4.82)
#默认饼图(无标签)
pie(slice.pct)
#自定义饼图(加上颜色设置及标签说明)
col_c = c(1:5) #使用系统预设的颜色1,颜色2,颜色3,颜色4,颜色5
pie(slice.pct, main = "Pie Chart 园饼图%", #加上标题
labels = c("非常不满意 1.4%", "不太满意 9.8%", "一般 39.3%",
"还算满意 44.6%", "非常满意 4.8%"),
col = col_c) #加上颜色与说明的pie图
调用”sjmisc”套件中的”rec”函数
#重新编码(sjmisc::rec)
#将原始变量(Q14)依照我们的编码规则(1:2=1; 3=2; 4:5=3),
#重新编码(rec)为另一新的变量(Q14r),并给予变量名称(var.label)
#和变量标签名称(val.labels)。
#将新的变量(Q14)设置为类别变量(as.num=FALSE)
library(sjmisc)
stfoodEx.sav$Q14r <- rec(stfoodEx.sav$Q14,
rec = "1:2=1; 3=2; 4:5=3" ,
var.label = "满意度三分类",
val.labels = c("不满意", "一般", "满意"),
as.num = FALSE
)
library(sjmisc)
flat_table(stfoodEx.sav,Q14, Q14r)
## Q14r 不满意 一般 满意
## Q14
## 非常不满意 18 0 0
## 不太满意 103 0 0
## 一般 0 411 0
## 还算满意 0 0 473
## 非常满意 0 0 53
#将R记忆体中的档案,转存成R数据资料档(*.rda)
save(stfoodEx.sav, file = "stfoodEx.sav.rda")
#下载"RCPA3"套件
#install.packages("RCPA3")
#调用"RCPA3"套件
library(RCPA3)
#频次分布
#原始未加权
freqC(x = stfoodEx.sav$Q14)
## ===========================================================================
## Describing Distribution of Values with Frequency Table and Bar Chart
## ===========================================================================
##
##
## Table: Frequency Distribution of stfoodEx.sav$Q14 (14.总体来说,对于食堂所提供的餐食服务,您满不满意?)
##
## Frequency Percent
## ------ ---------- --------
## 1 18 1.70
## 2 103 9.74
## 3 411 38.85
## 4 473 44.71
## 5 53 5.01
## Total 1058 100.00
#加权后
freqC(x = stfoodEx.sav$Q14, w = stfoodEx.sav$w_rak_fin)
## ===========================================================================
## Describing Distribution of Values with Frequency Table and Bar Chart
## ===========================================================================
##
##
## Table: Frequency Distribution of stfoodEx.sav$Q14 (14.总体来说,对于食堂所提供的餐食服务,您满不满意?), Weighted by stfoodEx.sav$w_rak_fin
##
## Frequency Percent
## ------ ---------- --------
## 1 14.83 1.40
## 2 104.16 9.85
## 3 416.20 39.34
## 4 472.28 44.64
## 5 50.54 4.78
## Total 1058.00 100.00
#加上标签
freqC(x = stfoodEx.sav$Q14, w = stfoodEx.sav$w_rak_fin,
digits = 1,
rowlabs = c("非常不满意","不太满意", "一般",
"满意","非常满意"),
xlab = "Q14 整体而言,你对于你的生活满不满意",
ylab = "百分比",
main = "频数分布条形图(加权后)")
## ===========================================================================
## Describing Distribution of Values with Frequency Table and Bar Chart
## ===========================================================================
##
##
## Table: Frequency Distribution of stfoodEx.sav$Q14 (14.总体来说,对于食堂所提供的餐食服务,您满不满意?), Weighted by stfoodEx.sav$w_rak_fin
##
## Frequency Percent
## ----------- ---------- --------
## 非常不满意 14.8 1.4
## 不太满意 104.2 9.8
## 一般 416.2 39.3
## 满意 472.3 44.6
## 非常满意 50.5 4.8
## Total 1058.0 100.0
当我们的数据分析工作告一段落后,我们经常会使用”rm(list =ls())“这个函数, 清除R记忆体中所有物件与资料, 以便在进行下次数据分析时,R的工作环境有个全新的开始。
rm(list = ls()) #清除记忆体中所有物件与资料
此处将本章所使用到的R套件与函数摘录如下表,供学习者快速查阅。
套件 | 函数 | 说明 |
---|---|---|
base | install.packages() | 下载套件 |
library() | 调用套件 | |
class() | 查看变量的属性 | |
str() | 查看变量的属性、分类数目 | |
save() | 将档案存成R数据资料档格式(*.rda) | |
load() | 载入R数据资料档(*.rda) | |
head() | 查看R数据的前六笔资料 | |
tail() | 查看R数据的后六笔资料 | |
names() | 查看R数据中的所有变量 | |
nrow() | 查看R数据中有几行(多少个案数) | |
ncol() | 查看R数据中有几列(多少变量数) | |
dim() | 查看R数据中包含几笔资料,几个变量 | |
names() | 查看变量的名称 | |
View() | 在RStudio新开窗口,检视数据资料 | |
table() | 呈现变量的频数 | |
prop.table() | 呈现变量的频数比例(百分比) | |
data.frame() | 制作包含变量与个案的数据框 | |
pie() | 绘制基本的圆饼图 | |
rm(list=ls()) | 去除R当前工作环境中所有的数据与物件 | |
readxl | read_excel() | 将Excel格式数据资料档(*.xls)汇入到R |
haven | read_sav() | 将SPSS格式数据资料档(*.sav)汇入到R |
dplyr | mutate() | 制造新变量 |
stats | chisq.test() | 卡方适合度(样本代表性)检验 |
sjlabelled | read_spss() | 将SPSS格式数据资料档(*.sav)汇入到R |
to_factor() | 将变量设置为类别变量 | |
to_numeric() | 将变量设置为连续变量 | |
set_label() | 设置变量标签(variable label) | |
set_labels() | 设置变量值标签(value label) | |
get_label() | 查看变量标签 | |
get_labels() | 查看变量值标签 | |
sjmisc | frq() | 呈现频数分布表 |
rec() | 进行变量值的转换 | |
flat_tab() | 做两变量的交叉(检查变量转换是否正确) | |
sjstats | weighted_chisqtest | 加权后卡方适合度(样本代表性)检验 |
sjPlot | view_df() | 呈现R数据资料的编码簿 |