R语言(三) -- 数据结构

数据结构

向量 vector- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

*其他编程语言中没有向量,R的精髓!

类似于数学中集合的概念,由一个或多个元素所构成

用于存储数值型,字符型或逻辑型数据的一维数组

向量中元素只能为一个数据类型,不能混合

创建

c()     #可以理解为concatenate/collect/combine

e.g 

(1)  x<- c(1,2,3,4,5)

(2)  c(1:100)  #构建等差数列1

       seq(from= 1, to = 100, by = 2) #构建等差数列2,等差为2

       seq(from= 1, to = 100, length.out =10)  #只输出10个值,因此等差变大

(3) x[x>3] 取出x>3的值

(4) rep(x,each = 2, time=5)  #重复打印x每个元素两遍,五次

     rep(x,c(2,3,5,1,3)) #指定x中每个元素的重复次数

索引 

***R语言中索引从1开始而非0***

x[1] #x的第一个元素

x[c(4:18)]   #x4~18个元素

x[c(11,11,5,90,2)]  #指定位置的元素

%in% 元素是否在向量内,无需循环

  e.g k<- z%in%c("one", "two")

names()  #命名向量

e.g names(y) <- c("one", "two","three")

修改

x[1] <- 1  #修改索引为1的x

append( x = 向量名, values = 赋值, after= xxx)  #在xxx后面插入某元素

rm(x)   #删除向量

y <- y[-c(1:3)]  #删除元素

运算

x+1   #x中每一个元素+1

x+y  #对应索引的元素相加,两个向量之间必须有倍数关系

*  #相乘

**  #求幂

%% #求余

%/%   #整除

 常用函数

abs(x) #求绝对值

sqrt(x) #求平方根

log(16,base = 2) #以2为底

log10(x) #求以10为底的对数

exp(x)  #计算指数

ceiling(x) #返回不小于x的最大整数

floor(x) #返回不大于x的最大整数

trunc(x)  # 返回整数部分

round(x, num)#保留xnum位数=

sin(x) 

cos(x)

sum(x) #求总和

max(x) min(x) #求最值

range(x) #求x范围

mean(x) #求x平均值

var(x) #返回x发方差

sd(x)  #返回x标准差

prod(x) #求x连乘的积

median(x)  #求x中位数

quantile(x)  #计算分位数

which.max(x)  #返回x元素最大值索引值

cut(num,c(seq(0,100,10)))  #进行频数的统计

矩阵 Matrix- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

*矩阵是二维的,需要有行和列

*矩阵中数据类型需要一致

m<- matrix(1:20, 4, 5, byrow = T)  #构建一个四行五列的矩阵,按行来排列矩阵

#为行和列命名

rnames <- c("R1", "R2", "R3", "R4", "R5")  #为行命名

cnames <- c("C1", "C2", "C3", "C4", "C5")  #为列命名

dimnames(m) <- list(rnames, cnames)

dim(x) <- c(4,5) #给向量添加维数构建矩阵

索引

m[1,c(2,3,4)]  #m矩阵第一行,二三四列的元素

m[ ,2]  #访问第二列

m[-1,2]  #去除第一行,访问第二列

m["R1","C2"]  #也可以通过名称访问

运算

单矩阵:

每个元素进行相同操作

双矩阵:

四则运算 :行列一致

n*t  #矩阵内积

n %*%t  #矩阵外积

diag(m) #求对角线

t(m)  #矩阵转置,进行行和列的互换

# 计算和

colSums(m) 

rowSums(m) 

# 计算平均值

colMeans(m)

rowMeans(m)

数组Array- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

* 其实就是多维的矩阵

创建

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))

列表 list- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

*在其他编程语言中R一般和数组等同,但是在R语言中,列表是R最复杂的一种数据结构

*列表就是一些对象的有序组合,列表种可以存储若干向量,矩阵,数据框,甚至其他列表的组合

和向量对比:

1.模式上和向量类似,都是一维数据集合

2.向量只能存储一种数据类型,列表中的对象可以是R中任何数据结构,甚至是列表本身

创建

# 这里创建一个列表玩玩

a <- 1:20

b <- matrix(1:20, 4)

c <- mtcars

d <- "this is a test list"

mlist <- list(name1 = a,name2 = b,name3 = c,name4 = d) #注意名称可要可不要

访问

mlist[1]  #索引类似于向量,输出列表的一个子集,还是列表

mlist[[1]]  #两个中括号则输出元素本身的数据类型

mlist[c(1,4)] #访问多个元素的时候记得放入向量里

mlist $ name1  #通过$+名字访问,十分高效

 修改

访问后直接赋值

删除

1. mlist <- mlist[-5]  #负索引,赋值给原来的列表

2. mlist[[5]] <- NULL  #把对应值赋值为NULL

数据框 Dataframe- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

*是一种表格式的数据结构,旨在模拟数据集

*数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量,不同行业对数据集的行和列叫法不同

*实际上是一个列表。列表中的元素是向量,这些向量构成数据库的列,每一列必须有相同的长度,所以数据框是矩形结构,而且数据框的列必须命名

矩阵与数据库

1. 数据框形状上很想矩阵

2. 数据库是比较规则的列表

3. 矩阵必须为同一数据类型

4. 数据框每一列必须是同一类型,每一行可以不同

创建

state <- data.frame(state.name, state.abb, state.reigon, state.x77) #将每个数据存储为向量后用data.frame 合并

访问

state[c(2,4)] #输出第二和第四列

state[,"state.abb"]

state["Alabama",] #通过名字索引

state$Murder   # $符索引

e.g

lm(weight ~height ,data = women) #线性回归使用案例

#attach加载数据框到搜索路径中

e.g

attach(mtcars) #这样可以直接敲列名而不用$了

detach(mtcars)  #使用完数据后取消加载

因子Factor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

作用:分类,计算频数和频率

变量分类:

名义型:如城市名,省份

有序型:good, better, best, mtcars$cyl(汽车的气缸数), state.division, state.region

连续型:某个范围中任意值如身高,年龄,增长率

在R中名义型变量和有序性变量称为因子,factor。这些分类变量的可能值成为一个水平(level),如good, better, best都是一个level,这些水平值构成的向量就称为因子

定义

f <- factor(c("red","red", "blue", "green", "blue", "blue")) 

week <- factor (c("Mon", "Fri", "Thu","Wed", "Mon", "Fri","Sun", ordered = T, levels = c("Mon","Tue", "Wed", "Thu", "Fri", "Sat", "Sun")) #给出因子的水平, 这样输出就有顺序

fcyl <- factor(mtcars$cyl)  #定义一个变量为因子

猜你喜欢

转载自blog.csdn.net/Scabbards_/article/details/130263701
今日推荐