频数(Frequency)是统计分析中的基本概念,表示某个类别或数值在数据集中出现的次数。它是描述数据分布的核心指标之一,特别适用于分类数据和有序数据。频数在非参数统计中起着重要作用,既可以作为描述性统计量,也可以作为统计检验的基础,帮助研究者在数据无特定分布假设的情况下进行推断和决策。
为了自动统计频数,首先需要在R语言中导入原始的.xlsx文件,故首先需要安装
类似调用ggplot库,
在联网的状态下采用命令:
install.packages("readxl")
待如下的安装完成:
然后使用> library(readxl)
即可使用读取excel命令
data <- read_excel
尝试使用读取Excel中的特定工作表的命令:
data_sheet <- read_excel("C:\Temp\new_file.xlsx", sheet = "Sheet1");然而,显示错误:error: '\T' is an unrecognized escape in character string (<input>:1:31)。这是由于在R中,反斜杠(\)是一个转义字符,用于表示特殊字符(如 \n 代表换行,\t 代表制表符)。在你指定文件路径时,反斜杠被误认为是转义字符,从而导致错误。故应使用如下命令:
> data_sheet <- read_excel("C:/Temp/new_file.xlsx", sheet = "Sheet1")
即可完成导入
其中,使用如下命令即可在RStudio中调出表格的数据(见上图左侧):
> View(data_sheet)
统计频数的命令有3种:
rowSums() 和 colSums() :用于计算行、列的总数。这种方法对于已经将“是/否”的案例转化为“0”、“1”标记的情况较为适用;
table():如果数据是分类变量(如因子),即表格中的类型并非数字而非字符,适用table(data$Category i)的命令;
apply() :适用于按行或列统计任意计算值,便于统计范围。例如可以键入“sum(x > 3)”统计大于3的个数;
考虑到工科背景的试验数据及教学过程中的学生成绩为数值,且分布较广,故尝试采用apply()命令。
以如下的学生答题情况为例,笔者需要统计题1~题6的答题次数。使用命令:
> col_counts <- apply(data_sheet[, -c(1,8)], 2, function(x) sum(x == 1, na.rm = TRUE))
得到的结果为:59,17,65,19,57,23:
col_counts <- apply(data_sheet[, -c(1,8)], 2, function(x) sum(x == 1, na.rm = TRUE))命令表示将“apply(data_sheet[, -c(1,8)], 2, function(x) sum(x == 1, na.rm = TRUE))”的数值放到“col_counts”这个计数器里:
apply这个命令里各参数的释义如下:
data_sheet[, -c(1,8)] ##去除第1列、第8列;
2 ##按列操作(即对每个题目的答题情况进行处理)。1对应“按行操作”,2对应“按列操作”;
function(x) sum(x == 1, na.rm = TRUE) ##为构造一个函数,对每一列数据进行分析,即function(x) { ... },会被 apply() 应用于数据的每一行。对每一列的各项数据进行分析(x == 1表示每个元素都与
1
进行比较),TRUE 视为 1,FALSE 视为 0,用sum()函数计算"1" 出现的次数,na.rm 以忽略NA值。
进一步的,尝试计算各行1出现的情况。使用下面的命令:
> row_counts <- apply(data_sheet[, -c(1,8)], 1, function(x) sum(x == 1, na.rm = TRUE))
得到各行满足x == 1的个数,得到row_counts新数组,进行简单的校验,采用下列代码:
> count_distribution <- table(row_counts)
> print(count_distribution)
得到:
row_counts
0 1 2 3 4
7 1 4 29 36
即交白卷0人,答1题1人,答2题4人,答3题29人,答4题36人。
至此,完成了行、列满足特定条件的频数统计。