3. 数据结构
R拥有许多用于存储数据的对象类型, 包括标量、 向量、 矩阵、 数组、数据框和列表。 其中数据框是最常用的。
3.4 数据框
数据框(dataframe),列为变量,行为观测。
不同列数据类型/模式(数值型、字符型)可以不同,同一列/变量数据类型相同即可。
数据框(dataframe)是你在R中最常处理的数据结构,通过函数data.frame() 创建:
mydata <- data.frame(col1, col2, col3,...)
每一列的名称可由函数names 指定。
书中例子如下:
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
print(patientdata)
patientdata打印结果
选取数据框中的元素
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c("diabetes", "status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata$age
[1] 25 34 28 52
attach()、detach()和with()函数
- 使用选取元素的一般方法:
> summary(mtcars$mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> table((mtcars$disp))
71.1 75.7 78.7 79 95.1 108 120.1 120.3 121 140.8 145
1 1 1 1 1 1 1 1 1 1 1
146.7 160 167.6 225 258 275.8 301 304 318 350 351
1 2 2 1 1 3 1 1 1 1 1
360 400 440 460 472
2 1 1 1 1
- 使用attach()、detach()函数
> attach(mtcars)
> summary(mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
> table(disp)
disp
71.1 75.7 78.7 79 95.1 108 120.1 120.3 121 140.8 145
1 1 1 1 1 1 1 1 1 1 1
146.7 160 167.6 225 258 275.8 301 304 318 350 351
1 2 2 1 1 3 1 1 1 1 1
360 400 440 460 472
2 1 1 1 1
> detach(mtcars)
> summary(mpg) #在detach函数之后,无法使用
Error in summary(mpg) : object 'mpg' not found
- 使用with()函数
> with(mtcars,
+ {print(summary(mpg))
+ table(disp)})
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
disp
71.1 75.7 78.7 79 95.1 108 120.1 120.3 121 140.8 145
1 1 1 1 1 1 1 1 1 1 1
146.7 160 167.6 225 258 275.8 301 304 318 350 351
1 2 2 1 1 3 1 1 1 1 1
360 400 440 460 472
2 1 1 1 1
> print(summary(mpg)) #在with作用范围之外,无法使用
Error in summary(mpg) : object 'mpg' not found
实例标识符/行名
在R中, 实例标识符(case identifier) 可通过数据框操作函数中的rowname 选项指定。 例如, 语句:
patientdata <- data.frame(patientID, age, diabetes, status, row.names=patientID)
3.5 因子
如你所见, 变量可归结为名义型、 有序型或连续型变量。 名义型变量是没有顺序之分的类别变量。
有序型变量 表示一种顺序关系, 而非数量关系。
类别(名义型) 变量和有序类别(有序型) 变量在R中称为因子(factor)。 因子在R中非常重要, 因为它决定了数据的分析方式以及如何进行视觉呈现。
函数factor() 以一个整数向量的形式存储类别值,要表示有序型变量, 需要为函数factor()指定参数ordered=TRUE。
> status <- c("Poor", "Improved", "Excellent", "Poor")
> status_order <- factor(status, order=TRUE,
+ levels=c("Poor", "Improved", "Excellent") )
> status_label <- factor(status, order=TRUE,
+ levels=c("Poor", "Improved", "Excellent"),
+ labels = c("1", "2", "3"))
> print(status)
[1] "Poor" "Improved" "Excellent" "Poor"
> print(status_order)
[1] Poor Improved Excellent Poor
Levels: Poor < Improved < Excellent
> print(status_label)
[1] 1 2 3 1
Levels: 1 < 2 < 3
3.6 列表
列表(list) 是R的数据类型中最为复杂的一种。
一般来说, 列表就是一些对象(或成分, component) 的有序集合。
列表允许你整合若干(可能无关的) 对象到单个对象名下。
可以使用函数list()创建列表:
mylist <- list(object1, object2, ...)
其中的对象可以是目前为止讲到的任何结构。 你还可以为列表中的对象命名:
mylist <- list(name1=object1, name2=object2, ...)
举个例子:
> mylist <- list(
+ a = 12,
+ b = c("apple", "banana", "egg"),
+ d = matrix(c(1:6)),
+ c = data.frame(one = c(1:6), two = c(letters[1:6]), three =c(LETTERS[1:6]) )
+ )
> print(mylist)
$a
[1] 12
$b
[1] "apple" "banana" "egg"
$d
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
$c
one two three
1 1 a A
2 2 b B
3 3 c C
4 4 d D
5 5 e E
6 6 f F
书中的一些注意事项
-
.
在R中无特殊意义,$
具有引用子集的作用; - 无多行注释作用,每一行注释都应该以
#
开头; - 将一个值赋给某个向量、 矩阵、 数组或列表中一个不存在的元素时, R将自动扩展这个数据结构以容纳新值。
- R中没有标量。 标量以单元素向量的形式出现。
- R中的下标不从0开始, 而从1开始。
- 变量无法被声明。 它们在首次被赋值时生成。
网友评论