数据集
在R中按照个人要求的格式来创建含有研究信息的数据集包括以下两步:
选择一种数据结构来存储数据;
将数据输入或导入到这个数据结构中。
1.数据集的概念
数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。表1提供了一个假
想的病例数据集。
表1 病例数据
病人编号 (PatientID) |
入院时间 (AdmDate) |
年龄 (Age) |
糖尿病类型 (Diabetes) |
病情 (Status) |
---|---|---|---|---|
1 | 10/15/2009 | 25 | Type 1 | Poor |
2 | 11/01/2009 | 34 | Type 2 | Improved |
3 | 10/21/2009 | 28 | Type 1 | Excellent |
4 | 10/28/2009 | 52 | Type 1 | Poor |
此数据集的结构(本例中是一个矩形数组)以及其中包含的内容和数据类型。在表1所示的数据集中, PatientID是行/实例标识符, AdmDate是日期型变量, Age是连续型变量, Diabetes是名义型变量, Status是有序型变量。
R中有许多用于存储数据的结构: 标量 (只含一个元素的向量) 、向量、矩阵、数据框和列表。表1实际上对应着R中的一个数据框。
R可以处理的数据类型(模式): 数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)。在R中,PatientID、AdmDate和Age为数值型变量,而Diabetes和Status则为字符型变量。
2.数据结构
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。
R中的数据结构.png2.1 向量(vector)
一维数组, 储存相同数据类型, 创建:函数
c()
a <- c(1, 2, 5, 3, 6, -2, 4) #a是数值型向量 b <- c("one", "two", "three") #b是字符型向量 c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE) #c是逻辑型向量
示例:
a <- c("k", "j", "h", "a", "c", "m")
a[3] # []获取给定元素所处位置的数值
# [1] "h"
a[c(1, 3, 5)]
# [1] "k" "h" "c"
a[2:6] # :生成一个数值序列,a <- c(2:6)等价于a <- c(2,3, 4, 5, 6)
# [1] "j" "h" "a" "c" "m"
2.2 矩阵(matrix)
二维数组, 储存相同数据类型, 创建:函数
matrix()
myymatrix <- matrix(vector, #矩阵的元素 nrow=number_of_rows, #行的维数 ncol=number_of_columns, #列的维数 byrow=logical_value, #按行填充(byrow=TRUE),还是按列填充(byrow=FALSE),默认按列填充 dimnames=list(char_vector_rownames, char_vector_colnames) #行,列名 )
示例1: 创建矩阵
##创建一个5x4的矩阵
y <- matrix(1:20, nrow=5, ncol=4)
y
# [,1] [,2] [,3] [,4]
# [1,] 1 6 11 16
# [2,] 2 7 12 17
# [3,] 3 8 13 18
# [4,] 4 9 14 19
###########################
cells <- c(1,26,24,68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
##按行填充的2×2矩阵
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,
dimnames=list(rnames, cnames))
mymatrix
# C1 C2
# R1 1 26
# R2 24 68
##按列填充的2×2矩阵
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,dimnames=list(rnames, cnames))
mymatrix
# C1 C2
# R1 1 24
# R2 26 68
示例2: 矩阵下标的使用
##创造一个数字1到10的2×5矩阵。默认情况下,矩阵按列填充
x <- matrix(1:10, nrow=2)
x
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 3 5 7 9
# [2,] 2 4 6 8 10
x[2,] #选择第2行元素
# [1] 2 4 6 8 10
x[,2] #选择第2列元素
# [1] 3 4
x[1,4] #选择第1行第4列的元素
# [1] 7
x[1, c(4,5)] #选择了第1行第4,5列的元素
# [1] 7 9
矩阵都是二维的,和向量类似,矩阵中也仅能包含一种数据类型。当维度超过2时,不妨使用数组(2.3节)。当有多种模式的数据时,你们可以使用数据框(2.4节) 。
2.3 数组(array)
维度可以大于2, 储存相同数据类型, 创建:函数
array()
myarray <- array(vector, #数组中的数据 dimensions, #各个维度下标的最大值,数值型向量 dimnames=list( ) #可选的、各维度名称标签的列表 )
示例:
dim1 <- c("A1", "A2") #一维(行)名称
dim2 <- c("B1", "B2", "B3") #二维(列)名称
dim3 <- c("C1", "C2", "C3", "C4") #三维名称
z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) #三维(2x3x4)数值型数组
z
# , , C1
# B1 B2 B3
# A1 1 3 5
# A2 2 4 6
# , , C2
# B1 B2 B3
# A1 7 9 11
# A2 8 10 12
# , , C3
# B1 B2 B3
# A1 13 15 17
# A2 14 16 18
# , , C4
# B1 B2 B3
# A1 19 21 23
# A2 20 22 24
z[1,2,3] #从数组中选取元素的方式与矩阵相同,获取第3维中第1行第2列的数据
# [1] 15
2.4 数据框(Datafram)
二维数据, 每列相同数据类型;每列行数(长度)相同, 创建:函数
data.frame()
不同的列可以包含不同模式(数值型、字符型等)的数据mydata <- data.frame(col1, col2, col3,... #列向量col1、 col2、 col3等可为任何类型 )
示例1:创建一个数据框
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) #创建数据框
patientdata
# patientID age diabetes status
# 1 1 25 Type1 Poor
# 2 2 34 Type2 Improved
# 3 3 28 Type1 Excellent
# 4 4 52 Type1 Poor
示例2:选取数据框中的元素
patientdata[1:2] #获取数据框中1列到2列两列
# patientID age
# 1 1 25
# 2 2 34
# 3 3 28
# 4 4 52
patientdata[c("diabetes", "status")] #选取数据框中diabetes列,status列两列
# diabetes status
# 1 Type1 Poor
# 2 Type2 Improved
# 3 Type1 Excellent
# 4 Type1 Poor
patientdata$age #表示patientdata数据框中的变量age
# [1] 25 34 28 52
## $ 选取一个给定数据框中的某个特定变量
##糖尿病类型变量diabetes和病情变量status的列联表
table(patientdata$diabetes, patientdata$status)
# Excellent Improved Poor
# Type1 1 0 2
# Type2 0 1 0
2.6 (list)
多对象的有序集合, 每列数据类型;每列行数(长度)可不同, 创建:函数
list()
某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合mylist <- list(object1, object2, ...) mylist <- list(name1=object1, name2=object2, ...)
示例:
g <- "My First List"
h <- c(25, 26, 18, 39)
j <- matrix(1:10, nrow=5)
k <- c("one", "two", "three")
mylist <- list(title=g, ages=h, j, k) #创建列表,包括四个成分:一个字符串、一个数值型向量、一个矩阵以及一个字符型向量
mylist #输出整个列表
# $title
# [1] "My First List"
# $ages
# [1] 25 26 18 39
# [[3]]
# [,1] [,2]
# [1,] 1 6
# [2,] 2 7
# [3,] 3 8
# [4,] 4 9
# [5,] 5 10
# [[4]]
# [1] "one" "two" "three"
##可以通过在双重方括号中指明代表某个成分的数字或名称来访问列表中的元素。
mylist[[2]] #输出第二个成分
# [1] 25 26 18 39
mylist[["ages"]]
# [1] 25 26 18 39
mylist$ages #对于命名成分,$也可以正常运行
# [1] 25 26 18 39
由于两个原因,列表成为了R中的重要数据结构。首先,列表允许以一种简单的方式组织和重新调用不相干的信息。其次,许多R函数的运行结果都是以列表的形式返回的。需要取出其中哪些成分由分析人员决定。
网友评论