数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。
R中有许多用于存储数据的结构,包括标量、向量、数组、数据框和列表。
向量是用于存储数值型、字符型或逻辑型数据的一维数组。
标量是只含一个元素的向量,用于保存常量。
注:单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。
创建向量:c()
x <- 100
a <- c(1, 2, 5, 3, 6, -2, 4)
name <- "Jasson"
b <- c("one", "two", "three")
c1 <- TRUE
c2 <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
访问向量中的第m个元素(和第n个元素),逗号用于访问向量中的指定元素
a[3]
b[c(1,3)]
使用冒号用于访问向量中第m个元素~到第n个元素
c2[2:4]
is.vector(a)
矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。
创建矩阵:matrix()
eg1. 数字1~20,4行5列,按行填充
x1 <- matrix(1:20,nrow = 4,ncol = 5,byrow = TRUE)
eg2. 定义一个4*4矩阵,名为Mat,矩阵第一行4 5 8 9,矩阵第二行 1 6 3 2,矩阵第三行 0 1 0 1,矩阵第四行5 2 0 1
m <- c(4,5,8,9,1,6,3,2,0,1,0,1,5,2,0,1)
Mat <- matrix(m,nrow = 4,ncol = 4,byrow = TRUE)
定位位于第2行,第1的元素
Mat[2,1]
定位第2行所有元素
Mat[2,]
定位第1列所有元素
Mat[,1]
定位位于第1行,第2、3列的元素
Mat[1,c(2,3)]
Mat[1,2:3]
定位位于第1、2行,第2、3列的元素
Mat[1:2,2:3]
Mat[c(1,2),c(2,3)]
f <- c(3,5,2,4)
rname <- c("R1","R2")
cname <- c("C1","C2")
y <- matrix(f,nrow = 2,ncol = 2,dimnames = list(rname,cname))
y
is.matrix(y)
数组(array)与矩阵类似,但是维度可以大于2。三维包括行、列、层。
创建数组:array()
f1 <- c("A1","A2")
f2 <- c("B1","B2","B3")
f3 <- c("C1","C2","C3")
z <- array(1:18,c(2,3,3),dimnames = list(f1,f2,f3))
z
z[1,2,2]
is.array(z)
数据框中不同的列可以包含不同模式(数值型、字符型等)的数据。由于数据有多种模式,无法将此数据集放入一个矩阵,在这种情况下,使用数据框是最佳选择。
创建数据框:data.frame()
ID <- c(1001,1002,1003)
NAME <- c("张三","李四","王五")
MATH <- c(90,85,95)
ENG <- c(85,90,90)
Score <- data.frame(ID,NAME,MATH,ENG)
Score
访问数据框中的列
Score[1:2]
Score[2]
Score[,2]
访问数据框中的行
Score[2,]
访问数据框中的变量
Score$NAME
Score[c("MATH","ENG")]
summary(Score$MATH)
summary()函数:获取描述性统计量
is.data.frame(Score)
attach(md)
summary(Income)
detach(md)
with(md,{summary(Income)})
变量可归结为名义型、有序型或连续型变量,类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。
创建因子:factor()
Type <- c("T1","T2","T3","T1")
TF <- factor(Type)
TF
要表示有序型变量,需要为函数factor()指定参数ordered=TRUE:
Type <- c("T1","T2","T3","T1")
TF <- factor(Type, order=TRUE)
TF
对于字符型向量,因子的水平默认依字母顺序创建:
status <- c("Poor", "Improved", "Excellent", "Poor")
status <- factor(status, ordered=TRUE)
status
即将向量编码为(3, 2, 1, 3),并在内部将这些值关联为1=Excellent、2=Improved以及3=Poor。
但你可以通过指定levels选项来覆盖默认排序:
status <- factor(status, ordered=TRUE, levels=c("Poor", "Improved", "Excellent"))
各水平的赋值将为1=Poor、2=Improved、3=Excellent。
对于数值型变量,可以用levels和labels参数来编码成因子:
sex <- c(1,2,1,1)
sex <- factor(sex, levels=c(1, 2), labels=c("Male", "Female"))
sex
is.factor(TF)
列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,
component)的有序集合。某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。
创建列表:list()
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
mylist[2]
mylist["ages"]
mylist$ages
is.list(mylist)
is.matrix(j)