版权声明:转载请声明出处,谢谢! 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)