数据结构与转换
内容提要
本文介绍R语言的数据结构:向量为一维数组,可存数值、字符或逻辑数据,用c()等创建;因子用于分类变量,分名义和有序;矩阵为二维数组,支持乘法、转置、行列式等运算;数组为多维结构;列表最灵活,可混合不同类型对象;数据框为二维结构,行表示观测、列表示变量,各列类型可不同,是医学数据分析最常用的结构。此外还介绍了is.和as.系列类型判断与转换函数。
延伸解读
因子水平顺序决定统计参考组
在R中,因子变量的第一个水平默认作为统计模型的参考组。文章指出,可以通过两种方式改变参考组:一是在factor()函数中调整levels和labels参数的顺序;二是使用relevel()函数指定新的参考水平。这对于医学研究中的回归分析尤为重要,因为参考组的选择会影响系数解释。例如,将性别因子的参考组从“男性”改为“女性”,模型中其他水平的系数含义会相应变化。
向量化运算与循环补齐规则
R的向量化运算允许直接对向量进行逐元素计算,如BMI计算中weight / height^2。但当两个向量长度不一致时,R会自动循环补齐较短向量,并发出警告。文章示例中,长度为5的向量a与长度为3的向量b相加,b被循环使用,结果长度为5,同时提示“longer object length is not a multiple of shorter object length”。这提醒读者在运算前应检查向量长度,避免意外结果。
数据框:医学数据分析的核心结构
数据框是二维结构,行表示观测,列表示变量,且各列可存储不同类型的数据(如数值、字符、因子)。文章强调,大多数结构化医学数据集都以数据框形式呈现,因此它是R中最常处理的数据结构。数据框本质上是列表,可用$符号访问列,例如patients$age。许多矩阵操作也适用于数据框,如子集选择,但数据框的列类型可以不同,这比矩阵更灵活。
类型判断与转换函数的使用场景
R提供了一系列is.和as.函数用于判断和转换数据类型。is.函数返回TRUE或FALSE,as.函数将对象转换为目标类型。文章举例:数值向量x经as.character()转为字符向量后,is.numeric()返回FALSE。在数据分析中,明确数据类型至关重要,因为分析方法的选择依赖于数据类型。例如,将字符型数字转换为数值型才能进行数学运算,而将数值型分类变量转换为因子才能用于统计模型。
Q&A
R语言中向量、因子、矩阵、数组、列表和数据框分别是什么?
向量是一维数组,用于存储数值、字符或逻辑数据;因子用于分类变量,分为名义和有序;矩阵是二维数组,元素类型相同;数组是多维结构,维度大于2;列表最灵活,可混合不同类型对象;数据框是二维结构,行表示观测、列表示变量,各列类型可不同。
在R中如何创建向量?有哪些常用函数?
可以使用c()函数创建向量,例如x1 <- c(2, 4, 1, -2, 5)。对于有规律的向量,可以使用冒号运算符(如1:5)、seq()函数(如seq(from=2, to=10, by=2))和rep()函数(如rep("a", times=4))。
R中因子有什么作用?如何创建有序因子?
因子用于表示分类变量,分为名义变量(无顺序)和有序变量(有顺序)。创建因子使用factor()函数,指定levels和labels参数。要创建有序因子,需设置ordered=TRUE,例如:factor(status, levels=c(1,2,3), labels=c("Poor","Improved","Excellent"), ordered=TRUE)。
R中矩阵的乘法、转置、行列式和逆矩阵如何计算?
矩阵乘法使用%*%运算符,要求第一个矩阵的列数等于第二个矩阵的行数;转置使用t()函数;行列式使用det()函数;逆矩阵使用solve()函数。例如:mat1 %*% mat2, t(mat1), det(mat3), solve(mat3)。
R中数据框与矩阵有什么区别?如何创建数据框?
数据框是二维结构,行表示观测,列表示变量,各列可以有不同的数据类型;矩阵所有元素类型必须相同。数据框使用data.frame()函数创建,例如:patients <- data.frame(ID, sex, age, pain.f)。数据框是医学数据分析中最常用的结构。
R中如何判断和转换数据类型?
R提供is.系列函数判断类型(如is.numeric()、is.character()),返回TRUE或FALSE;as.系列函数转换类型(如as.numeric()、as.character())。例如:is.numeric(x)判断x是否为数值型,as.character(x)将x转换为字符型。