R语言与数据分析——【笔记】1.数据对象及其类型

一、基本语法语句

1、R语言在线帮助系统(网站)命令:

help.start()、topic、help(topic)、help.search(topic)等命令

2、R中内嵌的帮助工具

命令:?solve()、help(solve)

二、R中数据对象及其类型

基本四种类型
1、数值型

包括整型、单、双精度实型

对象的数据类型和长度可以分别通过mode()和length()得到

⭐️R中可以正确的表示无穷的数值,如用Inf和-Inf表+∞和-∞

2、字符型

用双或单引号界定

⭐️双引号下要引用双引号可以用 \ 转义

3、复数型

一些处理复数的特别的函数

如 Re(z)获取复数实部

4、逻辑型

取非(!)、取与(&和&&)、取或(|和||)

三、对象

1、对各数据对象的说明

向量:一个变量的取值

因子:一个分类的变量

数组:一个多位的数据表

矩阵:数据框

数组和矩阵中所有元素必须为同一类型 ;

数据框由一个 / 几个向量或因子构成,他们必须等长,但可以是不同数据类型

2、对象的显示和删除

显示

①显示所有在内存中的对象(名):ls()

②显示名称中带有指定字符的对象:用pattern属性指定 即 ls(pattern=“m”)

③显示名称中以某个字母开头的对象:ls(pattern=“^m”)

④显示所有对象的详细信息:ls.str()

删除

删除某个对象:rm()

3、R语言中向量
(1)数值型向量

常用四种方法建立:

seq()、rep()、c()、scan()

①seq()或":" :适合较简单规律向量

eg:
> 1:3
[1] 1 2 3
> z<-seq(1,3,by=0.5)  等价于 seq(from=1,to=3,by=0.5)
[1] 1.0 1.5 2.0 2.5 3.0

②rep() :适合较复杂规律的向量

eg:
> z<-rep(2:4,2) 等价于rep(2:5,times=2)
> z   [1] 2 3 4 2 3 4
> z<-rep(1:3,rep(2:3))  /3个数,每个重复2/  
> z   [1] 1 1 2 2 3 3
> z<-rep(1:3,time=3,each=2)  /每个数重复2,整体重复3次/ 
> z   [1] 1 1 2 2 3 3 1 1 2 2 3 3 

③c():向量没有规律

eg:
> x<-c(5,2,34,20) 
> x  [1] 3 2 34 20

④scan():通过键盘逐个输入

> z<-scan()
>1:33
>2:45
>3:9
>         //两个回车即可结束输入
Read 3 items
>z
[1] 33 45 9 

(2)字符型向量
eg:
> z<-("green","red")

函数paste()可以接收任意个数参数,并从中逐个取出字符拼接成字符串,生成字符串个数与参数中最长字符串长度相同

eg:
> z <- paste(c("x","y"),1:3,seq=":")   //默认字符串间用空格分隔,且不能接收指定
>z
[1] "x 1" [2] "y 2" [3] "x 3"
(3)逻辑型向量

逻辑型向量值可是TRUE、FALSE、NA

(4)因子型向量

利用函数**factor()**创建,其调用格式如下

factor(x,levels=sort(unique(x),na.last=TRUE),labels=levels,exclude=NA,ordered=is.orderd(x) )

x: 为创建因子的数据,是一个向量;

levels:因子数据的水平,默认是x中不重复的值(即不重复数据个数);

labels:指定水平因子名称,默认取levels的值;

exclude:从x中剔除的水平值,默认为NA值;

ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,否则取FALSE;

nmax:水平个数的限制。

字符型因子和数值型因子可相互转化

①字符型向量转换为因子
> a<-c("freen","blue","green","yellow")   //将向量赋值给a
> a<-factor(a)			//将a转化为因子并重新赋值
> a
[1] freen blue green yellow
Levels: blue freen green yellow
②数值型向量转换为因子
> a<-c(1,2,3,2)   //将向量赋值给a
> a<-factor(a)			//将a转化为因子并重新赋值
[1] 1 2 3 2
Levels: 1 2 3
③字符型因子转化为数值型因子
> a<-c("green","blue","green","yellow")
> a<-factor(a)  //转化为因子
> a
[1] green blue green yellow
Levels: blue green green yellow
> levels(a)<-c(1,2,3,4)  
> a
[1] 2 1 2 3
Levels: 1 2 3 4

**函数levels()**用来提取一个因子中可能水平数

**函数gl()**可产生规则的因子序列:

gl(k,n) k为水平数;n是每个水平重复的次数;除此外此函数还有可选属性:①length指定产生数据的个数,label指定水平因子的名称

eg1: gl()
> gl(3,4)
[1] 1 1 1 1 2 2 2 2 3 3 3 3 
Levels:1 2 3
eg2:带length和label的gl()
> gl(2,3,length=9,label=c("Yes","No"))
[1] Yes Yes Yes No  No  No  Yes Yes Yes
Levels: Yes No
4、向量的运算(略)
5、常见统计函数

向量中 最大元素:max(x) 最小元素:min(x) 最大元素的下标**(R是从1开始)**:which.max(x)

​ 最小元素下标:which.min() 均值:mean() 元素总和:sum(x) 元素乘积:prod(x)

​ 向量长度:length(x) 向量逆序:rev(x)

​ 升序排列:sort(x) 属性decreasing=TRUE表降序 升序的秩(序号):order(x)decreasing=TRUE表降序的秩

​ 向量的秩(未排序的):rank(x)

6、向量的下标与子集(元素)的提取

分4种不同类型来提取

①正整数向量

x[1:4]选取4个元素; x[c(1,3)]选取1、3个元素

②负整数向量

x[-(1:4)]去除前4个元素;

③字符型向量:用于提取有names属性并由它来区分(即不能重复names,否则出现混乱情况)向量中元素元素的向量

eg:
> x<-c(1,3,5,7)
> names(x)<-c("red","yellow","blue","green")
> x
   red yellow   blue  green 
     1      3      5      7 
> choiceColor<-x[c("red","blue")]
> choiceColor
 red blue 
   1    5 

④逻辑型向量:取出满足条件的元素(即返回TRUE)

> x<-c(1,3,5,45,21)
> x>10
[1] FALSE FALSE FALSE  TRUE  TRUE
> x[x>10]
[1] 45 21
7、数组与矩阵

数组是一个k(大于等于1)维的数据表,矩阵是数组的特例,其维数k=2

(1)数组的建立

array(data,dim,dimnames)

由array()函数建立,data为向量;dim为数组维数向量(数值型);dimnames为由各维名称构成的向量(字符型),缺省为空

eg:
> a<-array(1:4,dim=c(1,2,2))
> a
, , 1
     [,1] [,2]
[1,]    1    2
, , 2
     [,1] [,2]
[1,]    3    4
> dim(a)
[1] 1 2 2
> dimnames(a)<-list(c("行1"),c("列1","列2"),c("数组1","数组2"))
> a
, , 数组1
    列1 列2
行1   1   2
, , 数组2
    列1 列2
行1   3   4
(2)矩阵的建立

也可用array()建立,但更常用matrix(),对角矩阵则用diag()更方便

  • R中矩阵元素默认按列排
eg:
> A<-array(1:6,c(2,3))
> A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> B<-matrix(1,nr=2,nc=2)  #元素为1,2行,2列
> B
     [,1] [,2]
[1,]    1    1
[2,]    1    1
> C<-diag(3)
> C
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

指定行名,列名:

rownames(x)<-c(“a”,“b”)

colnames(x)<-c(“c”,“d”)

指定矩阵数据项填充方向:

由参数byrow指定,缺省为按列填充(byrow=FALSE)

eg:
> x<-matrix(1:6,2,3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x<-matrix(1:6,2,3,byrow = TRUE)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
(3)数组与矩阵的下标和子集(元素)的提取
> x<-matrix(1:6,2,3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x[2,2]#提取位于第二行第二列的元素
[1] 4
> x[,2] #提取第二列的元素
[1] 3 4
> x[,2,drop=FALSE]  #避免数据库转换成因子
     [,1]
[1,]    3
[2,]    4
> x[-1,] #去掉第一行
[1] 2 4 6
> x[,3]<-NA #添加与替换元素
> x
     [,1] [,2] [,3]
[1,]    1    3   NA
[2,]    2    4   NA
> x[is.na(x)<-1] #缺失值用1代替
[1] 1
> x[is.na(x)]<-1 #缺失值用1代替
> x
     [,1] [,2] [,3]
[1,]    1    3    1
[2,]    2    4    1
(4)矩阵的运算函数
  • 代数运算

①转置函数t():(行列转换)

②提取对角元diag():提取矩阵对角线上(一条)的元素

③两矩阵按行合并rbind()和按列合并cbind()

rbind(矩阵1,矩阵2) #按行合并,即矩阵2以行增加在在矩阵1下面

⑤逐元乘积“ * ” :两矩阵相对应位置上乘积,矩阵行列数需相同

  • 统计运算

①对对象施加某种运算的函数:apply()

>apply(x,MARGIN,FUN)
x:矩阵	MARGIN=1按列计算,=2按行运算	FUN:+-*\等运算符

②sweep()函数

③scale()函数

8、数据框

与矩阵和二维数组形式类似,不同的是其行列意义。列表示变量,行表示观测值

(1)数据框的建立

①建立一些向量并用他们生成数据框

> x=c(42,7,64,9)
> y=1:4
> z=data.frame(INDEX=y,VALUE=x)
> z
  INDEX VALUE
1     1    42
2     2     7
3     3    64
4     4     9
  • 数据框中向量必须有相同长度或有倍数关系(按"循环"整数次)

②间接建立:通过函数read.table()读取数据文件(文本文件、Excel等)的观测值来建立

>zsq<-read.table(file="‪D:\桌面\zsq.txt",header=T)
>zsq
	Treat	weight
1	A		4.5
2	B		NA
3	C		6.8
#  header=T的含义是表示第一行为标题行,默认是F
(2)数据框适用函数
(3)数据框的下标和子集(元素)的提取
  • 与矩阵基本相同,不同的是数据框列可以使用变量的名称
#1、提取单个元素
>Puromycin[1,1]	#提取位于第一行第一列的元素
[1]0.02
#2提取一个子集
>Puromycin[c(1,3,5),c(1,3)]	#提取位于第1、3、5行,第1、3列的元素
>Puromycin[c(1,3,5),c("conc","state")]	#提取位于第1、3、5行,变量名为conc、state的元素
#3提取一列
>Puromycin$conc 等价于Puromycin[,1]
#4提取满足条件的子集
>subset(Puromycin,state=="treated"&rate>160)
(4)数据框添加新变量
  • 三种方法

以在Puromycin中增加变量icon为例,其定义为1/conc

①基本方法:

>Puromycin$iconc<-1/Puromycin$conc

②with()函数

>Puromycin$icons<-with(Puromycin,1/conc)

③transform()函数,且可一次性定义多个变量

>Puromycin<-transform(Puromycin,icon=1/conc,sqrtconc=sqrt(conc))
9、时间序列
10、列表
  • 包含任何类型的对象

用函数==list()==创建,其创建方法,默认没有对象名称,下标和子集提取等和数据框一样

> L=list(1:6) #一个对象的列表
> L
[[1]]
[1] 1 2 3 4 5 6
> L=list(1:6,"列表数据2",matrix(1:4,nrow=2)) #三个对象的列表
> L
[[1]]
[1] 1 2 3 4 5 6

[[2]]
[1] "列表数据2"

[[3]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

> L=list(x=1:6,x2="列表数据2",y=matrix(1:4,nrow=2)) #给对象添加了名称的列表数据
> L
$x
[1] 1 2 3 4 5 6

$x2
[1] "列表数据2"

$y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客编程_毕设大师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值