R语言——(一)、数据结构与基本运算

目录

    • 学习之前小技巧:
  • 1、数据类型
  • 2、数据对象
    • 2.1.1 向量(vector)结构
    • 2.1.2 矩阵结构
    • 2.1.3 数组结构
    • 2.1.4 因子结构
    • 2.1.5 列表
    • 2.1.6 数据框

提示:以下是本篇文章正文内容,下面案例可供参考

学习之前小技巧:

下载应用可进入微信搜索“软件管家”,任何大部分软件齐全。
下载奥rstudio后,发现界面的字体非常小。我们可以进行调整字体以及界面样式:
在这里插入图片描述
R语言——(一)、数据结构与基本运算_第1张图片
R语言——(一)、数据结构与基本运算_第2张图片
进行调整就好啦!

快捷键:

#清除所有历史变量
rm(list = ls())
#清空控制台
#ctrl+l

1、数据类型

1.1 数值型(numeric)为实数形式

1.2 字符型(character): 夹在双引号"“或单引号’'之间的字符串,如"MR”,“5”

1.3 逻辑型(logical):只能取T(TRUE)或F(FALSE)值

1.4 复数型(complex):形如a+bi形式的复数。

1.5 原味(原始)型(raw):以二进制形式保存的数据

1.6 默认值(missing value):当一个元素或值在统计的时候是“不可得到”(not available)或“缺失值”(missing value)时,相关位置可能会被保留,并且赋予一个特定的NA(not available)值。 利用is.na()函数可以检测数据是否缺失,如果缺失,返回TRUE, 否则返回FALSE。
(示例):

z <- c(1:5,NA)
z
is.na(z)  #判断z中元素是否有缺失

结果:
R语言——(一)、数据结构与基本运算_第3张图片

2、数据对象

2.1 R语言中的数据对象主要有6种结构: 向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)以及数据框(data frames)。
注意: 在R中,特别要注意精度问题,例如:

x <- seq(0, 1, by = 0.2)#seq()是生成序列的函数
x
y <- seq(0, 1, by = 0.2)
y
y[4] #取y中第4个数据
x[3] #取x中第3个数据

1-x[3]
y[4] > 1-x[3]#左边为0.6,右边也是0.6,但判断结果返回为TRUE,这是由于在浮点运算中的精度问题导致的

R语言——(一)、数据结构与基本运算_第4张图片

2.1.1 向量(vector)结构

2.1.1.1 向量赋值

x <- c(1,3,5,7,9) #用c()函数构建向量
x

c(1,3,5,7,9) -> y #数值型
y

z <- c('male','female','female','male') #字符型
z

u <- c(TRUE, FALSE, TRUE, TRUE, FALSE) #逻辑型
u

c <- c(1,2,3,'male') #混合型
c

R语言——(一)、数据结构与基本运算_第5张图片
paste()函数可以把自变量对应元素连成一个字符串,长度不相同时,较短的向量会被重复使用。

v <- paste('x', 1:5, sep = '') # sep=''表示文本分隔符为空格。
v

在这里插入图片描述

paste('Today is ', date()) #显示当前日期时间

在这里插入图片描述

assign('w',c(1,3,5,7,9)) #assign()函数是对向量w进行赋值
w

在这里插入图片描述
2.1.1.2 向量的运算
向量的乘法、除法、乘方运算,是对应向量的每个分量做乘法、除法和乘方运算。

x <- c(1,3,5,7,9)
y <- c(1,3,5,7,9)
x*y #对应元素相乘
x/y #对应元素相除

# 注意:“%*%”表示向量x,y的内积
x%*%y #内积

#注意:“%/%”表示整数除法,“%%”表示求余数.
9%/%4
9%%4
x%/%y
x%%y

R语言——(一)、数据结构与基本运算_第6张图片
注意:当出现在同一个表达式的向量最好同一长度,如果长度不一时,
表达式中短的向量将会被循环使用。

例:

c(1,3,5)+c(2,4,6,8,10)

在这里插入图片描述
2.1.1.3 生成有规则序列
最简单的是用“:”,可以产生有规律的正则序列:

(t <- 1:10) #在表达式外面套上括号,就是把结果直接打印出来。
t <- 1:10 #如果在表达式外面不套括号,R将运算结果保存在t对象里,但是不会把t的结果打印出来。
t
(r <- 5:1) #5:1表示逆向序列

R语言——(一)、数据结构与基本运算_第7张图片
还可以利用seq()函数产生有规律的各种序列
seq()函数的语法是:seq(from,to,by),from表示起始值,to表示终止值,by表示步长。

seq(1,10,2) 
seq(1,10) #没有指出步长时,默认步长为1.
seq(10,1,-1)
seq(10,1) #默认步长为-1。

R语言——(一)、数据结构与基本运算_第8张图片
rep()函数可以用于各种复杂的方式重复一个对象。
命令为:rep(x,times,…),其中x表示要重复的对象,times表示重复的次数。

rep(c(1,2,3),4)

rep(c(1,2,3),each=4) #each=4表示向量c(1,2,3)中的每一个元素重复4次。

rep(1:4,rep(3,4))#里面的rep(3,4)是嵌套,表示向量c(3,3,3,3)

R语言——(一)、数据结构与基本运算_第9张图片
2.1.1.4 向量的常见函数

x <- c(1,3,5,7,9)
# length()返回向量的长度
length(x)  #返回向量x的长度
# mode()返回向量的数据类型
mode(x)
# min()返回向量的最小值
min(x)
# max()返回向量的最大值
max(x)
# range()返回向量的范围
range(x)
# which.min()返回向量的最小值是第几个分量
which.min(x)
# which.max()返回向量的最大值是第几个分量
which.max(x)
# mean()对向量x求均值
mean(x)
# median()求向量的中位数
median(x)
# var()求方差
var(x)#求方差
# sd()求标准差
sd(x)

R语言——(一)、数据结构与基本运算_第10张图片

y <- c(2,6,7,3,5)
y
# sort()对向量中元素从小到大排序
sort(y)
# rev()将向量中的元素按照原方向的反方向排序
rev(y)
# rank()给出向量的秩,即给出向量中各元素所处的位次大小,这与矩阵中的秩不同。
rank(y)
# prod()计算向量中所有元素的乘积
prod(y)#计算向量中所有元素的乘积
# append()为向量添加元素。
append(y,10:15,after = 3) #向量y中第三个元素后面添加元素10,11,12,13,14,15

R语言——(一)、数据结构与基本运算_第11张图片
2.1.1.5 向量索引
在R中,提供了灵活的向量下标运算,取出向量x的某一个元素,可以利用x[i]得出。

x <- c(1,3,5)
#返回x向量的第2个元素
x[2]
x[c(1,2)]

(c(1,2,3)+4)[2]#先进行向量运算c(1,2,3)+4,再返回该向量的第二个元素

x[2] <- 10 #将10赋值给向量x中的第2个元素,即是替换掉原来的值
x

R语言——(一)、数据结构与基本运算_第12张图片
把x[i]中的i换成逻辑语句,就可以对向量进行逻辑运算:

x <- c(1,3,5)
x < 4 #判断向量x中的元素是否小于4

x[x<4] #返回x向量里小于4的元素

z <- c(-1, 1:3, NA)
z
z[is.na(z)] <- 0 #对向量z中的缺失值赋值为0
z

z <- c(-1,1:3,NA)
z
y <- z[!is.na(z)] #将z中的非缺失值赋值给y
y

R语言——(一)、数据结构与基本运算_第13张图片
这种方法可以用在对分段函数的定义上

x <- c(-3, -2, -1, 0, 5, 7)

y <- numeric(length(x)) #生成与向量x的长度相同的数值型向量默认为0
y

y[x<0] <- 1-x[x<0] #求出x中小于0的元素对应位置,y对应位置的值用1-x[x<0]赋值。
y

y[x>=0] <- 1+x[x>=0] #求出x中大于等于0的元素对应位置,y对应位置的元素用1+x[x>=0]赋值。
y

x <- 1:10
x
x[-(1:5)] #下标取值是负整数,表示删除相应位置的元素。

R语言——(一)、数据结构与基本运算_第14张图片

2.1.2 矩阵结构

矩阵是将数据用行和列排列的长方形表格,是二维数组,其单元必须是相同的数据类型。通常用列表示不同的变量,用行表示各个对象。
R语言生成矩阵的函数是 matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
data 项为必要的矩阵元素
nrow 项为矩阵的行数
ncol 项为矩阵的列数
byrow项控制排列元素是否按行进行,byrow = FALSE为默认值,即是按照列顺序排列。

matrix(1:12,nrow = 4, ncol = 3, byrow = FALSE) # 写成byrow = F效果一样

matrix(1:12,nrow = 4, ncol = 3)#因为byrow = FALSE为默认值,与上面一行命令效果相同

matrix(1:12,nrow = 4, ncol = 3, byrow = T)#按行排列矩阵的元素

A <- matrix(1:12,nrow = 3, ncol = 4, byrow = F)#byrow = F为默认值
A

R语言——(一)、数据结构与基本运算_第15张图片
矩阵的转置

#t()求矩阵的转置矩阵
t(A)

c <- c(1:6)#默认为列向量
c
t(c)#转置为行向量
t(t(c))#再转置,为列向量

R语言——(一)、数据结构与基本运算_第16张图片

矩阵的乘积

A <- B <- matrix(1:21, nrow = 3, ncol = 7)

A*B#符号*表示矩阵对应元素相乘

A%*%t(B) 
t(A)%*%B

R语言——(一)、数据结构与基本运算_第17张图片
对角,单位矩阵:

A <- matrix(1:16, nrow = 4)
A
diag(A)#取矩阵A的对角元素, (Diagonal,对角)

### 对一个向量应用diag()函数,可以产生以这个向量为对角元素的对角矩阵。
diag(diag(A))

### 如果只输入一个正整数,则diag()将产生一个对应维数的单位矩阵
diag(3)

R语言——(一)、数据结构与基本运算_第18张图片
矩阵的逆矩阵求解:

B <- rnorm(16,100,10)#生成16个随机数,服从均值为100,方差为10的正态分布。
B

A <- matrix(rnorm(16),4,4)
A

solve(A)#求A的逆矩阵

R语言——(一)、数据结构与基本运算_第19张图片
求矩阵的特征值和特征向量,用函数eigen()

(A.eigen <- eigen(A,symmetric = T) )

R语言——(一)、数据结构与基本运算_第20张图片

2.1.3 数组结构

数组,既可以看作是带有多个下标的且类型相同的元素的集合,也可以看作是向量和矩阵的推广。
一维数组,就是向量
二维数组,就是矩阵
数组的生成函数是:array()
语法是:array(data = NA, dim = length(data), dimnames = NULL)
data 表示数据,可以为空
dim 表示维数
dimnames 可以更改数组的维度的名称。

(xxx <- array(1:24,c(3,4,2))) 
#表示产生维数为(3,4,2)的三维数组
#第一个元素3表示矩阵的行数,第2个元素4表示矩阵的列数,第3个元素2表示生成矩阵的个数。

R语言——(一)、数据结构与基本运算_第21张图片

dim(xxx)#返回数组的维度

#dim()还可以将一个向量转成维度为c(m,n,p)的数组
zz <- c(2,5,6,8,1,4,6,9,10,7,3,5)
zz
dim(zz) <- c(2,2,3) # 将向量zz转成维度为c(2,2,3)的数组。
zz

R语言——(一)、数据结构与基本运算_第22张图片
在运用dim()函数将一个向量zz转成维度为c(m,n,p)的数组时,必须满足mnp=原向量zz中的元素个数。

2.1.4 因子结构

分类型数据(category data)经常要把数据分成不同的水平或因子(factor)。
比如,学生的性别包括 男和女 两个因子。
因子代表变量的不同可能的水平(即使在数据中不出现),在统计分析中也十分有用。例如,将0,1转换为“yes”和“no”就很方便。
在R中,可以使用factor函数来创建因子,语法结构如下:
factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x))
levels指定因子的水平
labels指定水平的名字
exclude表示在x中需要排除的水平
ordered用于决定因子的水平是否有次序

y <- c('女', '男', '男', '女', '女', '女', '男')
(f <- factor(y)) #将y生成因子

levels(f) #提取因子f的水平

R语言——(一)、数据结构与基本运算_第23张图片
如果想要表示因子之间有大小顺序(即是考虑因子之间的顺序),可以利用ordered()函数产生。
在这里插入图片描述

2.1.5 列表

向量、矩阵、数组的元素都必须是同一类型的数据。如果一个数据对象需要包含不同类型数据类型,则可以采用列表list()函数。

#x、y、z分别表示班级、性别和成绩
x <- c(1,1,2,2,3,3,3)
y <- c('女','男','男','女','女','女','男')
z <- c(80,85,92,76,61,95,83)
(LST <- list(class = x, sex = y, score = z))

R语言——(一)、数据结构与基本运算_第24张图片
访问:

LST[[1]]#访问LST中的第1个分量数据
LST[1]#访问LST中的第1个分量数据构成的子列表(带有分量名称)

LST$class#访问列表LST中的分量class中的元素

R语言——(一)、数据结构与基本运算_第25张图片

2.1.6 数据框

数据框是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。
数据框每列是一个变量,每行是一个观测。数据框可以看作是矩阵的推广。
数据框也可以看作是一种特殊的列表对象(list).

1)生成与修改

x <- c(1,1,2,2,3,3,3)
y <- c('女','男','男','女','女','女','男')
z <- c(80,85,92,76,61,95,83)

(student <- data.frame(x,y,z))#数据框的列名默认为变量名
(student <- data.frame(class = x,sex = y, score = z))#对列名重新命名。

#对数据框student的行名进行修改
row.names(student) <- c('王某', '张某', '赵某', '刘某', '黄某', '孙某', '李某')
student

R语言——(一)、数据结构与基本运算_第26张图片
2)以数组形式访问数据。

student[,3]#返回第3列(z变量,score变量)的所有样本观测值
student[1:5,1:3]#返回数据框student的第1至第5行,第1至第3列的观察数
student[,]#返回数据框student中所有行和所有列的数据

R语言——(一)、数据结构与基本运算_第27张图片
3)以列表形式访问数据。

student$score#返回数据框student中score变量的所有样本观测值
student[['sex']]#返回sex变量的所有样本观察值
student[[2]]#返回第2个变量(sex变量)的所有样本观察值
student[student$score>80, ]#筛选数据框student中得分(score)大于80分的同学。

R语言——(一)、数据结构与基本运算_第28张图片
4)数据框绑定attach()函数。
不能直接访问数据。例:访问score。
在这里插入图片描述

score #直接不能返回数据框student中变量score中的数据

student$score#可以返回数据框student中score变量的所有样本观测值

attach(student)#先绑定数据框student
score#现在就可以直接返回数据框student中score变量的所有样本观测值
detach(student)#取消绑定

参考教材:《R数据分析方法与案例详解》

你可能感兴趣的:(R语言,r语言)