R语言学习笔记【简单语法总结-上】
简单语法总结【上】:
R语言特征总览:
- 对大小写敏感
- 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母)。不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字。
- 基本命令要么是表达式(expressions)要么就是 赋值(assignments)。
- 命令可以被 (;)隔开,或者另起一行。
基本命令可以通过大括弧({和}) 放在一起构成一个复合表达式(compound expression)。 - 注释:一行中,从井号(#)开始到句子收尾之间的语句就是是注释。
- R是动态类型、强类型的语言。
- R的基本数据类型:数值型(numeric)、字符型(character)、复数型(complex)和逻辑型(logical)
- R的对象类型:向量、因子、数组、矩阵、数据框、列表、时间序列。
一.向量
- 单个向量的数据必须拥有相同的类型,向量用于存储数值型、逻辑型、字符型数据的一维数组
1.1常量
1.2向量与赋值
x=c(12:78);x
2*1:15 #等价于c(2, 4, ..., 28, 30)冒号优先级别最高
x1=length(x);x1 #计算向量x的长度
1.3向量的运算
除(/)乘方(**或^)整除(%/%)求余数(%%)
x=c(1,2,6.18)
mode(x)#求x的数据类型
sqrt(x)#开方
options(digits=3)#控制结果的有效输出位数
mean(x)
prod(x) #则得到它们的乘积 (累积求积)
var(x)#求样本方差,如果var() 的参数是一个n×p 的矩阵 ,则得到协方差矩阵
range(x) #返回包含最大值和最小值的向量 ,值域
sort(x)#从小到大的结果向量
sort(x,decreasing=TRUE)#从大到小排序
order(x)#从小到大的元素的下标向量
order(x,decreasing=TRUE)
1.4.产生有规律的数列
#***********#注意以下两者的区别
n=5
1:n-1 #输出 0 1 2 3 4
1:(n-1) # 输出 1 2 3 4
#************2*1:15 #表示向量x=c(2,4,...,30) seq(n) #相当于1:nseq(2,6) #相当于seq(from=2,to=6)seq(1,2,0.1)#相当于seq(1,2,by=0.1)by为步长seq(0,length=5)#length指定数列长度,如果length和by都没有设定,默认值就是by=1(步长为1)。
#输出结果为:0 1 2 3 4seq(along=x) #产生该向量的下标序列rep(c(10,28),c(2,3))#可以重复第一个向量若干次 ,第一个向量为变量名,第二个向量为times(重复次数)
#输出结果为: 10 10 28 28 28z=rep(1:3,times=4,each=2);z #times:把x 完整拷贝五次,保持x的数列顺序,逐一放在s5 x 中;each:每个元素都重复五次,然后将重复五次的元素逐一放入z=sequence(3:5);zz=sequence(c(10,5));z
1.5.逻辑向量
比较运算符(==(相等)!=(不等于))
(c(4,-2,7,0)>3&c(0,3,5,6)<2)#&(与运算)|(或运算)!(c(4,-2,7,0)>3) #!(每个元素的非)all(!(c(4,-2,7,0)>3)) #判断一个逻辑向量是否都为真值any(!(c(4,-2,7,0)>3)) #判断一个逻辑向量是否有真值is.na(c(1,2,NA))#判断向量的每一个元素是否缺失age=78
c("young","old")[(age>65)+1]#逻辑值可以强制转化为整数值(TRUE为1,FALSE为0)
1.6.字符型向量
paste("i","love","homeland") #函数paste可以将自变量连城一个字符串
paste(c("x","y"),"=",1:4)
paste(c("X","Y"),1:10,sep="")
paste(c("x","y"),"=",1:4,seq=",") #分隔符用的符号可以用seq指定
1.7 向量下标指定
x=seq(1,8,by=2);x[3] #访问向量的某一个元素可以用x[i]
x[3]=15;x #还可以改变一个元素的值
x[c(1,3)]=c(188,199);x #可以改变一部分得值
x[c(1,3)]=0;x #可以把部分值赋为一个值
x[]=0;x #把向量全部得值赋值为相同得一个数
1.8 四种访问向量的方法
1.8.1 方法1:取正数值的下标访问
x=c(4,1,7,8)
x[c(1,3)]
x[1:2]
x[c(1,3,2,1)]
c("a","b","c")[rep(c(2,1,3),3)] #"b" "a" "c" "b" "a" "c" "b" "a" "c"
1.8.2 方法2:取负数值得下标访问 ,元素为-length(x)~-1,表示去掉相应位置得元素
x[c(-1,-3)] #输出:1 8
1.8.3 方法3:取逻辑值的下标向量 ,x[v],v为和x等长度的逻辑向量,x[v]表示取出所有v为真值的元素
x>3
x[x>3] #表示取出所有大于3的元素
x[x<(-9)]# 如果下标都为假值,则显示一个长度为0的向量,既numeric(0)
1.8.4 方法4:取字符型值得下标向量
ages=c(li=33,zhang=45,liu=89)
ages
ages["zhang"]#这样定义得向量可以用元素名字来访问元素或元素子集
ages[c("zhang","li")]
1.9 向量的模式与属性
数值型向量长度为零表示为numeric()或numeric(0)
字符型向量长度为零表示为character()或character(0)
a=1:10
b=as.character(a);b #强制进行类型转换
c=as.numeric(b);c
2.0 定义向量得分段函数
y=numeric(length(x))
y[x<0]=1-x[x<0]
y[x>=0]=1+x[x>=0]
x=c(-2,4,5,-10)
y
二.矩阵
2.1 矩阵
a=matrix(1:12,nrow=3,ncol=4,byrow=TRUE);a #nrow:行数 ncol:列数 byrow=TRUE按行排,byrow=FALSE按列排默认为按列排
b=matrix(c(1,2),ncol=3,nrow=4);b #指定的数据少于所需的数据,这是循环使用提供的数据
c(a) #将矩阵a的元素按列排列的向量
2.2矩阵的合并
c=rbind(c(1,2),c(3,4)) ;c#rbind()把自变量横向拼成一个大矩阵
d=cbind(c(1,2),c(3,4));d#cbind()把自变量列向拼成一个大矩阵
m1=matrix(1,nr=2,nc=2)
m2=matrix(2,nr=2,nc=2)
rbind(m1,m2) # 按行合并
cbind(m1,m2) # 按列合并
2.3 访问矩阵的元素和子矩阵
a
a[3,2]
a[1:2,] #x[i,]访问矩阵的i行 x[,j]访问矩阵的j列
a[1:2,c(2,4)]
a[-1,] #去掉一行(列)或若干行(列)
a[,3]=NA ;a #第三列为缺省值
a[is.na(a)]=1;a #将缺省值赋值为1
rownames(a)=c("a1","a2","a3");a#定义行名用rownames
colnames(a)=paste("x",1:4,sep="");a #定义列名用colnames
a["a1","x3"]
2.4 矩阵的运算
a+c(100,200,300) #将向量c(100,200,300)循环使用
t(a) #a的转置
b=matrix(c(1,0),nrow=4,ncol=2,byrow=T);b
a%*%b #a乘以b(a的行数得等于b的列数,内积
a%o%b #矩阵的外积
b=matrix(c(1,0),nrow=3,ncol=4,byrow=T);b
a*b # 矩阵对应元素相乘
c=matrix(1:9,nrow=3,ncol=3,byrow=T);c
diag(c) #diag(matrix)返回有矩阵的主对角元素组成得向量
diag(c(1:3)) #diag(vector)返回以自变量为对角元素的对角矩阵
diag(3) #diag(k)返回k阶单位矩阵
eigen(c); #eigen(c)用来计算矩阵c的特征值和特征向量(c为方阵)
det(c) #det()是求方阵行列式的值
2.5 array()函数
- apply()函数 :
相对矩阵的每行或每列进行计算可以用:
apply()函数形式为apply(x,margin,fun,…)
a=matrix(1:12,ncol=4,nrow=3,byrow=TRUE);a
apply(a,1,sum) #margin=1表示对每行计算,margin=2表示对每列进行计算
apply(a,1,mean) #求各行的均值
apply(a,2,mean) #求各列的均值
scale(a,center=T,scale=T) #标准化 ==?什么叫做标准化==
row.med=apply(a,MARGIN=1,FUN=median)
row.med
sweep(a,MARGIN=1,STATS=row.med,FUN="-") #减去中位数
2.6 矩阵转化为向量
a=matrix(1:6,nrow=2);a
as.vector(a)
2.7解线性方程组和求矩阵的逆矩阵
solve(a,b) #a是系数矩阵,b是右边的矩阵
solve(a) #矩阵求逆
`
三.数组
3.1数组
- 数组有一个特征属性叫做维数向量(dim属性)维数向量是一个元素取正整数值的向量,其长度是数组的维数。
比如:维数向量有两个元素时数组为二维数组,一组值只有在定义了dim属性后才能看作是数组
==?==下面不大懂
z=1:24
dim(z)=c(2,3,4);z #2x3x4 数组元素的排列时按列序数,第一个下标变化最快,最后一个下标变化最慢
dim(z)=24;z
- array()函数可以直接定义数组:
array(x,dim=length(x),dimnames=NULL)
#其中x表示数组组成的元素;
#dim的参数可省,省略时为一维数组(但一维数组不等同于向量 );
#dimnames属性可以省略,不省略时是一个长度与维数相同的列表
3.2索引数组
z=array(1:24,dim=c(2,3,4));z
z[1,2,3]
z[1:2,2:3,3:4] #维数为c(2,2,2)的数组
z[,,4] #是一个2x3的矩阵
z[,2,4] #是一个长度为2的向量
x <- array(1:20, dim=c(4,5));x # 产生一个 4 × 5 的数组。
i <- array(c(1:3,3:1), dim=c(3,2));i # i 是一个 3 × 2 的索引矩阵。
x[i] # 提取这些元素
x[i] <- 0 # 用0替换这些元素
x
3.3 数组的维名字
x=matrix(1:6,ncol=2,dimnames=list(c("one","two","three"),c("first","second")),byrow=T);x #dimnames()可以保存各个下标的名字
x=matrix(1:16,ncol=2,byrow=T)
dimnames(x)=list(c("one","two","three","four","five","six","senven","eight"),c("first","second")) #可以先定义矩阵x再为dimnames(x)赋值
四.因子(factor)
因子(factor)是一个对等长的其他向量元素进行分类(分组)的向量对象。
因子在R语言中可以用来表示名义型变量或有序变量。
名义变量一般表示类别,如性别,种族等等。
有序变量是有一定排序顺序的变量,如职称,年级等等。
在R语言中,名义变量和有序变量可以使用因子来表示。
在R语言中可以使用factor()函数和gl()函数来创建因子变量。
4.1 factor() 函数
factor()函数用来把一个向量编码成一个因子 。
factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)
网上看到的:*****
factor()函数的语法格式为:f <- factor(x=charactor(), levels, labels=levels, exclude = NA,
ordered = is.ordered(x), namax = NA)
其中:
- x 为创建因子的数据,是一个向量;
- levels:因子数据的水平,默认是x中不重复的值;
- labels:标识某水平的名称,与水平一一对应,以方便识别,默认取levels的值;
- exclude:从x中剔除的水平值,默认为NA值;
- ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,否则取FALSE;
- nmax:水平个数的限制。
x=c("male","female","male","male","female")
y=factor(x);y #因子对象有一个属性levels表示这组离散值
#函数factor()用来把一个向量编码成一个因子,如下
#factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)
f=factor(c(1,0,1,1,0),levels=c(1,0),labels=c("male","female"));f
a=c("high","middle","low","middle" )
b=factor(a,ordered=TRUE);b #要表示有序型变量,需要为函数factor()指定参数ordered=TRUE
a=c("yes","yes","no","yes","no")
b=factor(a);b #将向量存储为(2,2,1,2,1),并在内部进行关联1=no,2=yes
str(b)
x=c(5,12,13,12)
y=factor(x);y
str(y)
#几个具体的例子来说明具体使用方法:fc1 <- factor(c(1, 2, 3, 3, 1, 2, 2, 3, 1, 3, 2, 1))fc2 <- factor(rep(1:3, times = 2), labels = c("A", "B", "C"))grade <- c("Freshman", "Sophomore", "Junior", "Senior")fc3 <- factor(grade, ordered = TRUE) #对于字符型向量,因子的水平默认依字母顺序创建fc4 <- factor(grade, ordered = TRUE, levels = c("Freshman", "Sophomore", "Junior", "Senior")) #指定levels,则按levels中的顺序定义数值
4.2 is.factor()检验对象是否为因子
4.3 as.factor()把一个向量转化为一个因子
4.4 levels()得到因子的水平
levels(y)
4.5 tapply()函数 多分组
当数据矩阵需要按其中的某一列,(或者几列,很少使用到)的内容来分组,在组内对数据需要使用指定的函数来运算时,就可以使用tapply。
tapply(x,INDEX,NULL,…,simplify=TRUE)
tapply(参数):tapply(向量,因子/因子列表,函数/函数名)
x是一个对象,通常为一个向量
#index是与x有相同长度的因子,
#fun是要计算的函数
#因子可以用来另外的同长度的分类变量
sex=factor(c("male","female","male","male","female"))
h=c(165,170,168,172,159)
tapply(h,sex,mean)
d = data.frame(hours = sample(1:12, 10, replace = TRUE),sex = c("male", "female", "male", "female", "male", "female", "male", "female", "male","female"),age = sample(10:26, 10, replace = TRUE))
d$type = ifelse(d$age > 18, "adult", "underage")
d
tapply(d$hours,list(d$sex,d$type),mean)
4.6 gl() 函数:用于定义有规律的因子向量,可以方便地产生因子.
gl(n,k,length=n*k,labels=1:n,odered=FALSE)
- n:正整数,表示因子的水平个数
- k:正整数,表示每个水平重复的次数;
- length为结果长度,正整数,表示因子向量的长度,默认为n*k
- labels为N维向量,表示因子水平的名称,默认为 1:n
- ordered是逻辑变量,表示因子水平是否是有次序的,默认值为FALSE
- 返回值为 因子长度从1到n,k为length组复制的每个值。
gl(2,3)
gl(2,1,6)
g1 <- gl(3, 3) # 1 1 1 2 2 2 3 3 3g2 <- gl(3, 3, 5) # 1 1 1 2 2g3 <- gl(3, 2, labels = c('A', 'B', 'C')) # A A B B C C
4.7 因子的索引
fc1[1] #访问输出第一个水平fc1[1:3] #访问输出1~3个水平fc1[c(1, 4, 7)] #访问输出第1,4,7个水平值fc1[-1] #排除第一个fc1[-c(1:4)] #排除第1~4个fc1[fc1 != 1] #过滤掉等于1的因子水平fc3[fc3 > 'Junior'] #对于有序因子可以使用>,>=,<,<=,!=,==;而非有序因子,只可以使用!=和==
【注】:因为因子一般表示名义变量或有序变量,如非有序因子,则使用>,>=,<,<=比较大小是没有意义的。
4.8 因子的修改
fc1[1] <- 3 #注意,修改的值必须在原有的水平中fc1[1:3] <- 2 #将1~3个水平值改为2fc1[-1] <- 3 #将除第1个水平之外的其它水平值修改为3fc1[-c(1,4,7)] <-1 #将除第1,4,7个水平之外的值修改为1
五.列表
列表(list)的各元素的类型可以是任意对象,不同元素不必是同一类型。
5.1列表
rec=list(name="黎明",age=30,score=c(86,6,90));rec
5.2 列表的引用
列表元素可以用列表名[[下标]]的格式引用
rec[[2]]
rec[[3]][2] #列表不同于向量,一次只能引用一个元素,如rec[[1:2]]是错误
rec[2] #列表名【下标】或列表名【下标范围】是合法的,意义与双重括号不同#两重括号的记号是取出列表的一个元素,结果与该元素类型相同
rec[1:2] #一重括号结果是一个子列表(结果类型仍为列表)
rec[["age"]] #在定义列表时如果指定了元素的名字(如rec中的name,score,age)则引用列表时可以用他的名字做下标
rec$name #另一种形式时列表名$元素名
5.3 列表的修改
rec$age=45;rec #列表的元素可以修改,只要把元素赋值即可
rec$age=list(29,34,78);rec #还可以这样修改
rec$sex="男";rec
rec[[6]]=121;rec #可以为列表延申新的元素,由于第五个元素没有定义,所以为了NULL
5.4 列表的连接
list.A=list(name="xiaoming",age=30,weight=68) #几个列表可以通过连接函数c()链接起来。结果仍为一个列表
list.B=list(height=176,grade="class3")
list.AB=c(list.A,list.B);list.AB
小总结:向量,矩阵,数组,数据框,列表的关系:
向量:
包含一个元素或多个元素。
矩阵:
由向量构成,是一个特殊的数组,即维数等于2的数组。
数组:
与只能有二维的矩阵不同的是,数组的维数不限,但元素的数据类型必须一致,即数值型都是数值型,字符串都是字符串。
数据框:
与数组不同的是,数据框里面的数据类型可以不一致,但向量维数必须相等,即各列数据长度相等。
列表:
最宽泛的一个集合,它的数据类型可以不一致,长度也可以不一致,可以由向量,矩阵,数组,数据框,函数,甚至是列表组成
关系图:
六.数据框(data.frame)
数据框(data.frame)是R中的一种数据结构,他通常是矩阵类型的数据,但矩阵各列可以是不同的类。
数据框每列是一个变量,每行是一个观测。
6.1数据框的生成
数据框可以用data.frame()生成,其用法与list()相同
d=data.frame(name=c("黎明","张冲","王建"),age=c(39,35,23),height=c(180,178,169));d
6.2 列表转化为数据框
d=list(name=c("黎明","张冲","王建"),age=c(39,35,23),height=c(180,178,169));d
a=as.data.frame(d) #如果列表的的各个成分满足数据框成分的要求。可以用as.data.frame()函数将其强制转化为数据框
class(a) #查看类型
6.3 矩阵转化为数据框
MO1=matrix(1:6,nrow=3);MO1 #一个矩阵可以用data.frame()转化为数据框
data.frame(MO1)
6.4数据框的引用
d=data.frame(name=c("黎明","张冲","王建"),age=c(39,35,23),height=c(180,178,169));d
d[1:2,2:3] #引用数据框元素的方法与矩阵的方法相同,可以使用下标或下标向量
d[[2]] #数据框的各变量可以按列表引用(既双括号【【】】或$引用)
d$name
name(d) #数据框的变量名用属性name定义
rownames(d) #数据框的各行用rownames定义
6.5 attach()函数;detach()函数.
attach()函数作用:将数据框加载到内存中。
detach()函数的作用:取消链接
attach(d) #attach()函数可以把数据框“连接入当前的名字空间,也可以连接列表
r=height/age;r
detach() #取消链接
6.6 列表与数据框的编辑
edit()函数对列表和数据框进行编辑
newd=edit(d) #会出现一个数据编辑窗口,可以在此窗口内进行编辑,如下图所示
6.7 追踪对象的函数
ls() #ls()可以列出所有定义过的函数
str(d) #str(变量名)列出此变量名的类型和数据
R语言学习笔记【简单语法总结-上】相关推荐
- R语言学习笔记——入门篇:第三章-图形初阶
R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...
- R语言学习笔记(1~3)
R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...
- R语言学习笔记——高级篇:第十四章-主成分分析和因子分析
R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...
- R语言学习笔记 06 岭回归、lasso回归
R语言学习笔记 文章目录 R语言学习笔记 比较lm.ridge和glmnet函数 画岭迹图 图6-4 <统计学习导论 基于R语言的应用>P182 图6-6<统计学习导论 基于R语言的 ...
- r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数
在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...
- R语言学习笔记——入门篇:第一章-R语言介绍
R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...
- R语言学习笔记 07 Probit、Logistic回归
R语言学习笔记 文章目录 R语言学习笔记 probit回归 factor()和as.factor() relevel() 案例11.4复刻 glm函数 整理变量 回归:Logistic和Probit- ...
- R语言学习笔记(八)--读写文件与网络爬虫
R语言学习笔记(八) 1 工作路径 2 保存R对象 3 Scan函数 3-1 从控制台读取数据 3-2 从txt文件读取数据 3-3 从url读取数据 4 按行读写文本文件 5 读取文本文件(txt. ...
- R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示
文章目录 写在前面 独立性检验 χ2\chi^2χ2独立性检验 Fisher独立性检验 Cochran-Mantel-Haenszel χ2\chi^2χ2独立性检验 相关性分析 相关性检验 相关性检 ...
最新文章
- tableau prep builder也是不支持m1芯片。。。
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机...
- tomcat 轮询_用Spring长轮询Tomcat
- 多线程 转账_多线程编程不可错过——彻底理解volatile
- 暴力——猜数字(hdu1172)
- jsonarray转liast_fastjson List转JSONArray以及JSONArray转List
- 【.Net】C#实现多线程的方式:使用Parallel类
- win10添加网络打印机_Mac可以访问Windows共享文件,添加网络打印机
- PADS2007破解方法之图文并茂版----本人亲自实践
- Matlab深度学习实践之手写体识别(含详细注释)
- FPGA之SDRAM控制器设计(二)
- python列表找大写字母_使用Python实现将list中的每一项的首字母大写
- 高斯消元求解四种方程组
- vue 实现高德地图搜索地址获取经纬度
- 任正非的小女儿,出道了!以后会代言华为手机吗?
- Notes真的无处不在
- 线程三连鞭之“线程基础”
- 51单片机学习笔记(清翔版)(25)——LCD1602和指针
- 自贸港有志青年,捂碳星球旧衣回收项目,成功引起团中央的重视
- GEE遥感云大数据在林业中的应用