试验一 R语言数据类型
一、向量
1. 创建
# 1.1.1 请利用c函数,输入5门专业课程的名称,组成向量nms。
nms=c('MATH','BIG DATA','CHINESE','DATABASE','ENGLISH')
print(nms)
# 1.1.2 请利用vector函数初始化score向量,记录问题1中5门专业课程的成绩。
score=vector('numeric',length=5)
score=c(88,90,100,73,53)
print(score)
# 1.1.3 请创建一向量grade,用逻辑值表示问题1中课程成绩是否达到优秀。
grade<-(score>85)
print(grade)
# 1.1.4 请将课程名称加入向量score中,作为每一分量的命名。
names(score)=nms
print(score)
2. 索引
# 1.2.1 请返回第3门功课的名称
names(score[3])
# 1.2.2 请返回第2到4门功课的成绩
score[2:4]
# 1.2.3 请返回除去第一门功课后,其他功课的名称
names(score[2:5])
# 1.2.4 请利用功课名称,获取score中对应的成绩
score['MATH']
score[c('BIG DATA','ENGLISH','CHINESE','DATABASE')]
# 1.2.5 请返回成绩大于80分的功课成绩
score[score>80]
3. 特征与操作
# 1.3.1 请输出成绩大于70分的功课有几门
sum(c(score>70))
# 1.3.2 创建空向量x,逐个添加你喜欢的三个数字
x=vector()
x<-append(x,1)
x<-append(x,3)
x<-append(x,7)
x
# 1.3.3 判断向量score是否为字符串向量
is.character(score)
4. 运算与其他操作
# 1.4.1 创建1到100的自然数组成的向量,奇数位加2,偶数位加4.
x=c(1:100)
x[seq(1,length(x),2)]=x[seq(1,length(x),2)]+2
x[seq(0,length(x),2)]=x[seq(0,length(x),2)]+4
x
# 1.4.2 创建形如(1,3,5,1,3,5,...,1,3,5)的向量,1,3,5重复100次
x=rep(c(1,3,5), 100)
x
# 1.4.3 创建形如(1,...,1,3,...,3,5,...,5)的向量,1,3,5各重复100次
x=rep(c(1,3,5), each=100)
x
# 1.4.4 利用runif函数生成100各随机数,显示大于0.5的数值所在的位置
x=runif(100)
which(x>0.5)
试验二 R语言数据类型2
一、矩阵与数组
创建
# 1.1 利用array函数,创建二维数组m1,每一行记录不同人(A,B,C)的各科成绩(math,english,physics),
# 成绩请随意输入(要求每行至少有一个90分以上,每一列至少有一个60分以下)
vector1 <- c(50,90,53)
vector2 <- c(100,41,87)
vector3 <- c(50,95,97)
m1 <- array(c(vector1,vector2,vector3),dim = c(3,3),dimnames=list(c('A','B','C'),c('math','english','physics')))
print(m1)
# 1.2 利用matrix函数,创建二维数组m2,每一行记录不同人(A,B,C)的各科成绩(math,english,physics),成绩请随意输入(要求每行至少有一个90分以上,每一列至少有一个60分以下)
m2 <- matrix(c(vector1,vector2,vector3),nrow=3,byrow = FALSE,dimnames=list(c('A','B','C'),c('math','english','physics')))
print(m2)
# 1.3 如果要记录2个学期的成绩,请写出代码示例(成绩随意填写),创建的数组记为m3
vector4 <- c(50,35,97)
vector5 <- c(80,96,34)
vector6 <- c(94,45,37)
m3 <- array(c(vector1,vector2,vector3,vector4,vector5,vector6),dim = c(3,3,2),dimnames=list(c('A','B','C'),c('math','english','physics'),c('GRADE1','GRADE2')))
print(m3)
索引
# 2.1 请尝试使用不同索引方式,索引m1中的数据
m1[2,2]
m1[1,]
m1[,1]
m1['A','math']
# 2.2 获取数学成绩高于85分的同学姓名
names(m1[,'math'][m1[,'math']>85])
# 2.3 获取单科成绩超过90分的同学姓名
names(rowSums(m1>90)[rowSums(m1>90)>1])
# 2.4 获取成绩超过90分的同学姓名和科目名称
x=m1>90
x
特征与操作
# 3.1 获取m1的行数,列数以及维度
nrow(m1)
ncol(m1)
dim(m1)
# 3.2 获取m3的行数,列数以及维度
nrow(m3)
ncol(m3)
dim(m3)
# 3.3 获取m3中数据的个数
length(m3)
# 3.4 获取m1的行名和列名
rownames(m1)
colnames(m1)
# 3.5 创建2X3和2X4的矩阵分别记为mm1,mm2, 可以怎样将他们组合成一个矩阵,组合后的矩阵维度是多少。
mm1<-matrix(1:6,nrow=2)
mm2<-matrix(8:15,nrow=2)
mm1
mm2
mm3<-cbind(mm1,mm2)
mm3
dim(mm3)
# 3.6 创建2X4和3X4的矩阵分别记为mm1,mm2, 可以怎样将他们组合成一个矩阵,组合后的矩阵维度是多少。
mm1<-matrix(1:8,nrow=2)
mm2<-matrix(9:20,nrow=3)
mm1
mm2
mm3<-rbind(mm1,mm2)
mm3
dim(mm3)
运算
# 4.1 将1到9创建为3行3列的矩阵A,将9到1创建为3行3列的矩阵B,计算A和B的和,差,乘积
A<-matrix(1:9,nrow=3)
B<-matrix(9:1,nrow=3)
A
B
A+B
A-B
A*B
# 4.2 求A的转置矩阵
t(A)
# 4.3 求A与B的内积
A%*%B
# 4.4 求A*B的逆矩阵
t(A*B)
试三 R语言数据类型3
列表
创建
# 1.1 创建一个列表L1,记录三位同学的姓名(A,B,C),编号(1,2,3),数学成绩(80,90,95),语文成绩(75,95,80)
L1<-list(c('A','B','C'),c(1,2,3),c(80,90,95),c(75,95,80))
names(L1)<-c('姓名','编号','数学成绩','语文成绩')
L1
# 1.2 将L1个组件命更改为英文,记为L2
L2<-L1
names(L2)=c('name','number','math grade','chinese grade')
L2
# 1.3 如果将L1和L2作为L3的两个组件,如何做?
L3<-list(L1,L2)
L3
索引
# 2.1 请尝试利用不同方法索引L1中数据
L1[1]
L1[1:4]
L1['编号']
L1[c(T,T,F,F)]
# 2.2 A同学的数学成绩是多少
L1['数学成绩'][[1]][1]
# 2.3 数学成绩大于85分的同学是谁?
L1['姓名'][[1]][c(L1['数学成绩'][[1]])>85]
# 平均成绩超过85分的同学是谁?
L1['姓名'][[1]][(L1['数学成绩'][[1]]+L1['语文成绩'][[1]])/2>85]
特征与操作
# 3.1 列表L1中有几个组件
length(L1)
# 3.2 列表中存储了多少个数值型数据
sapply(L1,is.numeric)
# 3.3 将L1和L2组合成一个新的列表记为L3
L3<-c(L1,L2)
L3
数据框
创建
# 1.1 创建一个数据框df1,记录三位同学的姓名(A,B,C),编号(1,2,3),数学成绩(80,90,95),语文成绩(75,95,80)
df1<-data.frame(name=c('A','B','C'),number=c(1,2,3),mathgrade=c(80,90,95),chinesegrade=c(75,95,80))
df1
# 1.2 将数据框的行名设置为姓名
df1<-data.frame(number=c(1,2,3),mathgrade=c(80,90,95),chinesegrade=c(75,95,80),row.name=c('A','B','C'))
df1
索引
# # 2.1 请尝试利用不同方法索引df1中数据
df1[2:3,3]
df1[2,]
df1[c(F,T,F),'mathgrade']
# 2.2 A同学的数学成绩是多少
df1['mathgrade'][[1]][1]
# 2.3 数学成绩大于85分的同学是谁?
df1['row.name'][t(c(df1['mathgrade'][[1]]>85))]
# 2.4 平均成绩超过85分的同学是谁?
df1['row.name'][t(rowMeans(df1[2:3])>85)]
特征与操作
# 3.1 获取数据框的行名
rownames(df1)
# 3.2 获取数据框的行数和列数
nrow(df1)
ncol(df1)
# 3.3 创建一个数据框df3,记录三位同学的姓名(A,B,C),英语成绩(85,80,95),将df3的信息与df1的信息合并为df5如何操作
df3<-data.frame(row.name=c('A','B','C'),englishgrade=c(85,80,95))
df1
df3
df5<-merge(df3,df1,by='row.name')
df5
# 3.4 创建一个数据框df4,记录一位同学的姓名(D),编号4,数学成绩80,语文成绩95,英语成绩85,将df4的信息与df5的信息合并为df6
df4<-data.frame(row.name=c('D'),number=4,mathgrade=80,chinesegrade=95,englishgrade=85)
df4
df6<-rbind(df4,df5)
df6