在大多数情况下,结构化的医学数据是一个由很多行和很多列组成的数据集 。在R中,这种数据集被称为数据框 。在学习数据框之前,我们先来认识一些用于存储数据的数据结构:向量、因子、矩阵、数组和列表 。这些数据结构在存储类型、创建方式和操作方式等方面均有所不同,熟悉它们的基本概念和操作技巧,将会让我们能够灵活高效地处理数据 。
2.1.1 向量向量(vector)是用于存储数值型、字符型、逻辑型数据的一维数组 。标量可以看作是只含有一个元素的向量 。函数c( )可用来创建向量,例如:
> x1 <- c(2, 4, 1, -2, 5)> x2 <- c("one", "two", "three")> x3 <- c(TRUE, FALSE, TRUE, FALSE)
这里x1是数值型向量,x2是字符型向量,而x3是逻辑型向量 。每一个向量中的数据类型必须一致 。如果想创建有规律的向量,R提供了一些简便的操作和函数,例如:
> x4 <- 1:5# 等价于x4 <- c(1, 2, 3, 4, 5)> x5 <- seq(from = 2, to = 10, by = 2)# 等价于x5 <- c(2, 4, 6, 8, 10)> x6 <- rep("a", times = 4)# 等价于x6 <- c("a", "a", "a", "a")
【R语言中包括哪些数据结构?】有时候我们只想使用向量中的某个部分,即选取向量的子集 。假设有一个从3到100的步长为7的整数向量,那么第5个数的值是多少呢?
> x <- seq(from = 3, to = 100, by = 7)> x [1]3 10 17 24 31 38 45 52 59 66 73 80 87 94
请注意,向量x的最后一个数并不是100而是94,因为94再加一个步长7,结果就将超过100了 。
> x[5][1] 31
在方括号“[ ]”中的数字被称为下标,它指定向量的索引位置 。在上面的命令里,x[5]表示向量的第5个元素,其值为31 。下面的命令显示向量的第4、第6和第7个元素:
> x[c(4, 6, 7)][1] 24 38 45
下标中的向量可以取负值,表示去除指定位置上的元素 。例如,要去掉x的前4个元素,可以输入下面的代码(注意命令里的括号):
> x[-(1:4)] [1] 31 38 45 52 59 66 73 80 87 94
R中的运算都是向量化的,例如:
> weight <- c(68, 72, 57, 90, 65, 81)> height <- c(1.75, 1.80, 1.65, 1.90, 1.72, 1.87)> bmi <- weight / height ^ 2> bmi[1] 22.20408 22.22222 20.93664 24.93075 21.97134 23.16337
在上面计算bmi的过程中,运算符“^”被循环使用了,所以计算的结果仍然是一个向量 。如果参与运算的向量的长度不一致,R会自动补全后计算,同时给出警告信息 。
> a <- 1:5> b <- 1:3> a + b[1] 2 4 6 5 7Warning message:In a + b : longer object length is not a multiple of shorter object length
上面向量a的长度为5,向量b的长度为3 。在计算a + b时,因为向量b的长度比向量a的短,所以向量b会从第一个元素开始循环使用 。因此,在最后的输出中,a中的第四个元素4加上了b的第一个元素1,a中的第五个元素5加上了b的第二个元素2 。
R提供了种类繁多的计算统计量的函数,常用的统计函数见表2-1 。用这些函数计算向量的统计量非常方便 。下面这段代码演示了其中的几个函数作用于向量bmi后的输出结果 。
> length(bmi)# 计算向量bmi的长度[1] 6> mean(bmi)# 计算向量bmi的均值[1] 22.5714> var(bmi)# 计算向量bmi的样本方差[1] 1.841265> sd(bmi)# 计算向量bmi的样本标准差[1] 1.356932
表2-1 常用的统计函数
文章插图
2.1.2 因子一般来说,变量有数值型、名义型和有序型之分 。名义型变量是没有顺序关系的分类变量,例如人的性别、血型、民族等 。而有序型变量是有层级和顺序关系的分类变量,如患者的病情(较差、好转、很好) 。名义型变量和有序型变量在R中称为因子(factor) 。因子在R中非常重要,它决定了数据的展示和分析方式 。数据存储时因子经常以整数向量形式存储 。所以在进行数据分析之前,经常需要将它们用函数factor( )转换为因子 。例如:
> sex <- c(1, 2, 1, 1, 2, 1, 2)> sex.f <- factor(sex, levels = c(1, 2), labels = c("Male", "Female"))> sex.f[1] MaleFemale MaleMaleFemale MaleFemaleLevels: Male Female
上面的命令先定义了一个变量sex表示性别,假设其取值1表示男性,2表示女性 。接着用函数factor( )将变量sex转换成了因子并存为对象sex.f,其中参数levels表示原变量的分类标签值,参数labels表示因子取值的标签 。注意,这两个参数在赋值时需要一一对应,R会将它们相关联 。因子型变量与一般的字符型变量的区别就是它有一个水平(level)属性 。因子的属性可以使用函数levels( )查看:
推荐阅读
- 你知道黑客最喜欢使用的编程语言吗
- 红茶系列包括哪些茶,红茶介绍红茶的种类与泡法红茶的功效与作用
- 汇编语言的使用领域
- mysql慢查询语句分析总结
- 莎士比亚经典语录有什么
- 莎士比亚四大喜剧包括什么
- 画蛇添足的成语故事缩写 画蛇添足是历史成语吗
- 学平险都保什么?
- 擂茶的分类有哪些,擂茶的风情物语介绍
- 河姆渡茶文化遗存,茶文化体系茶文化体系包括茶史学