R语言习题

本文详细介绍了R语言中的数据类型,包括向量的创建、索引、特征与操作,如利用c和vector函数创建向量,通过索引获取和修改数据,以及逻辑判断。此外,还探讨了矩阵与数组的创建、索引、特征与运算,如使用array和matrix函数创建二维数组,通过索引获取特定数据,并进行矩阵运算。最后,讲解了列表和数据框的创建、索引及操作,如创建包含学生信息的列表和数据框,并进行数据提取和筛选。
摘要由CSDN通过智能技术生成

试验一 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

在这里插入图片描述

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值