简单语法总结【上】:

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语言学习笔记【简单语法总结-上】相关推荐

  1. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  2. R语言学习笔记(1~3)

    R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...

  3. R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

    R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...

  4. R语言学习笔记 06 岭回归、lasso回归

    R语言学习笔记 文章目录 R语言学习笔记 比较lm.ridge和glmnet函数 画岭迹图 图6-4 <统计学习导论 基于R语言的应用>P182 图6-6<统计学习导论 基于R语言的 ...

  5. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  6. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

  7. R语言学习笔记 07 Probit、Logistic回归

    R语言学习笔记 文章目录 R语言学习笔记 probit回归 factor()和as.factor() relevel() 案例11.4复刻 glm函数 整理变量 回归:Logistic和Probit- ...

  8. R语言学习笔记(八)--读写文件与网络爬虫

    R语言学习笔记(八) 1 工作路径 2 保存R对象 3 Scan函数 3-1 从控制台读取数据 3-2 从txt文件读取数据 3-3 从url读取数据 4 按行读写文本文件 5 读取文本文件(txt. ...

  9. R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示

    文章目录 写在前面 独立性检验 χ2\chi^2χ2独立性检验 Fisher独立性检验 Cochran-Mantel-Haenszel χ2\chi^2χ2独立性检验 相关性分析 相关性检验 相关性检 ...

最新文章

  1. tableau prep builder也是不支持m1芯片。。。
  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机...
  3. tomcat 轮询_用Spring长轮询Tomcat
  4. 多线程 转账_多线程编程不可错过——彻底理解volatile
  5. 暴力——猜数字(hdu1172)
  6. jsonarray转liast_fastjson List转JSONArray以及JSONArray转List
  7. 【.Net】C#实现多线程的方式:使用Parallel类
  8. win10添加网络打印机_Mac可以访问Windows共享文件,添加网络打印机
  9. PADS2007破解方法之图文并茂版----本人亲自实践
  10. Matlab深度学习实践之手写体识别(含详细注释)
  11. FPGA之SDRAM控制器设计(二)
  12. python列表找大写字母_使用Python实现将list中的每一项的首字母大写
  13. 高斯消元求解四种方程组
  14. vue 实现高德地图搜索地址获取经纬度
  15. 任正非的小女儿,出道了!以后会代言华为手机吗?
  16. Notes真的无处不在
  17. 线程三连鞭之“线程基础”
  18. 51单片机学习笔记(清翔版)(25)——LCD1602和指针
  19. 自贸港有志青年,捂碳星球旧衣回收项目,成功引起团中央的重视
  20. GEE遥感云大数据在林业中的应用

热门文章

  1. Javascript——下载功能,获取电脑桌面制定下载路径
  2. 云终端和瘦客户机的区别
  3. Windows远程桌面连接不上问题
  4. openwrt下有线网设置详细过程
  5. 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)
  6. 计算机报录比10:1,中国石油大学(华东)比去年大幅增加!
  7. Mindjet MindManager 2021中文版注册序列号
  8. linux各种配置笔记
  9. 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)
  10. 刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系