R语言中的数据结构

版权声明:转载请声明出处,谢谢! https://blog.csdn.net/qq_31468321/article/details/83245491

R语言中的数据结构

文本中对R语言中的数据结构进行总结,以说明和举例的方式展现出来!
主要包含:向量,数组,列表,数据框,因子,矩阵,和一些常用函数。
注:以下代码均可直接运行!

1、向量

向量,用于存储数值型,字符型,逻辑型数据的一维数组
同一向量中无法混杂不同模式的数据
举例:

创造一个包含1到5的数字的向量

a<-c(1:5)
a

添加数据

b<-append(a,7)
b

添加向量(在第二个位置插入)

c<-append(a,c(8:10),after = 2)
c
a

求和函数

sum(a)
sum(b)
sum(c)

求最大函数

max(a)
max(b)
max(c)

求最小函数

min(a)
min(b)
min(c)

求平均函数

mean(a)
mean(b)
mean(c)

方差计算

f <- sum((a-mean(a))^2/4)

标准差

bb<- sqrt(f)
bb
f

求方差函数

var(a)
var(b)
var(c)

求标准差函数

sd(a)
sd(b)
sd(c)
从小到大排序
为false时从小到大
sort(a,decreasing = TRUE)#为true是从大到小
反向
rev(a)
rev(sort(a))

向量内元素相乘

prod(a)

阶乘

prod(1:5)

2、矩阵

矩阵,用于存储数值型,字符型,逻辑型数据的二维数组
同一向量中无法混杂不同模式的数据
举例:

创建一个3行4列的矩阵

mat<-matrix(c(1:12),nrow = 3,ncol = 4)
mat

维数获取

dim(mat)

矩阵中的每个元素乘以2

mat_s<-mat*2
mat_s

满足矩阵相乘的条件

左边矩阵的列数=右边矩阵的行数
mat2<-matrix(c(1:12),nrow = 4,ncol = 3)
mat2

矩阵相乘

mat %*% mat2

添加列名

colnames(mat) <- c('序号','语文','英语','数学')
mat

取出1行2列的值

mat[1,2]

取出第二行

mat[2,]

取出第二列

mat[,2]

取出1,2行1,2列的值

mat[c(1:2),c(1,2)]

取出2,3行的值

mat[c(2,3),]

逻辑判断

判断第二列是否大于5,返回true或者false
mat[,2] >=5
返回第二列大于等于5的行
mat[mat[,2]>=5,]
which
返回第四列大于等于12的行序列
which(mat[,4]>=12)
返回第四列大于等于12的行
mat[which(mat[,4]>=12),]
返回第四列大于等于11的行序列
which(mat[,4]>=11)
返回第四列大于等于11的行
mat[which(mat[,4]>=11),]

apply

查看文档
?apply

对第二列的数据求均值

mean(mat[,2])

对行操作

apply(mat,1,mean)

对列操作

apply(mat,2,mean)

3、数组

数组,数组与矩阵类似,但是维度可以大于二
举例:

创建一个三维数组

arr <- array(c(1:24),dim = c(2,3,4))
arr

获取数组维数

dim(arr)

获取每一维的第二列第一行的元素

arr[1,2,]

获取每一维的第一行元素

arr[1,,]

运用求和函数

sum(arr[1,2,])

4、数据框

数据框可以理解为一个高纬度的数组,不同的列可以包含不同的模式
举例:

name<- c('zs','lss','ww')
sex<-c('n','v','v')
age<-c(22,21,23)

创建一个数据框

dat<-data.frame(name,sex,age)
dat
查看数据类
class(dat)#数据类
mode(dat)#数据大类(包含字符型,数值型,逻辑性)
typeof(dat)#数据细类(包含浮点型,int型。。。)

获取第1行第三列的值

dat[1,3]

根据列名获取第三个值

dat$age[3]

添加列

dat$score<-c(98,99,80)
dat

获取成绩为99的那一行

dat[which(dat$score==99),]

创建一个矩阵

dat2<-matrix(c(1:12),nrow = 3)
dat2

将矩阵转化为数据框,数据框必须有列名

dat3<-as.data.frame(dat2)
dat3

根据列名获取某一列数据

dat3$V1

连接

dat
dat3

dat0<-data.frame(name=name,weight=c(60:62))
dat0

数据框连接

dat0$age<-c(20:22)
dat0
dat01<-merge(dat,dat0,by.x = 'age',by.y = 'age')
dat01[which(dat01$name.x==dat01$name.y),]

合并

dat
dat0

#此处有错误,找找看

按行合并,列数必须相同

dat_r<-rbind(dat,dat0)
dat_r

按列合并,行数必须相同

dat_c<-cbind(dat,dat0)
dat_c

重命名列名

names(dat0)<-c('name','score','agr')
dat0
dat0$sex<-c(23,23,24)
dat0

返回一个列表

lapply(dat$age,sum)

返回一个向量

sapply(dat0$score,sum)

5、因子

因子,名义型变量和有序型变量在R中称为因子
举例:

创建一个因子

a<-factor(c('A','B','C','C','A'))
a

levels因子可能的水平

#label因子标签
#exclude从向量中剔除的水平值
b<-factor(c('A','B','C','D','C','A'),levels = c('A','B','C','D'),labels = c('A罩杯','B罩杯','C罩杯','D罩杯'))
b

colour<-c('G','G','R','R','Y','G','G','Y','G','R','G')
col<- factor(colour)
col
col1<-factor(colour,levels = c('G','R','Y'),labels = c('Green','Red','Yellow'))
col1
col2<-factor(colour,levels = c('G','R','Y'),labels = c('1','2','3'))
col2

class(col2)
typeof(col2)
mode(col2)

转换成一个向量

as.vector(col2)

#ordered创建一个有序的因子
score<-c('A','B','A','C','B')
score1<-ordered(score)
score1
score1<-ordered(score,levels=c('C','B','A'))
score1

#cut(创建有序型变量)
exam<-c(98, 97, 52, 88, 85, 75, 97, 92, 77, 74, 70, 63, 97, 71, 98, 65, 79, 74, 58, 59, 60, 63, 87, 82, 95, 75, 79, 96, 50, 88)
exam1<-cut(exam,breaks = 3)#分成三组
exam1
#区间步长
(max(exam)-min(exam))/3

#常用函数tapply()
gender<-c('f','m','m','m','f')
age<-c(12,35,32,34,25)
#tapply(vector, index, function)
tapply(age, gender, mean)

6、列表

列表,列表为一些对象的有序集合,包含向量,矩阵,数据框,或者其他列表。
举例:

列表可以包含数字,字符串,向量。。。

a<-2
b<-'abc'
c<-c(1:4)
l<-list(a,b,c)
l
l[[2]]
l[[3]]

列表索引

l<-list(a=a,b=b,c=c)
l
l$c

绑定列表

attach(l)
a
c

转化为向量

l<-unlist(l)
l
l[5]

计算操作

x<-list(a=1,b=c(1:4),c=c(3:6))
x

返回一个列表

lapply(x,sum)
lapply(x,mean)

lapply(x,sum)[[2]]

返回一个向量

sapply(x,sum)
sapply(x,mean)
sapply(x,mean)[2]
sapply(x,mean)

猜你喜欢

转载自blog.csdn.net/qq_31468321/article/details/83245491