r语言于1997年成为GNU项目的开源免费
r是数据分析领域的语言
小巧灵活,通过扩展包增强功能
绘图功能
代码很简单
开发环境
R RStudio
1、数据类型
字符
数字类型、实数或小数
整数
complex多型
逻辑逻辑类型类似于布尔学习
2、数据结构
载体
因子
数组
矩阵
数据帧数据框
列表
一维:矢量、因子矢量为数值型变量,因子对应分类变量
二维:矩阵、数据框矩阵中元素的数据类型一致,数据框由向量组成,每个向量中的数据类型一致,向量之间的数据类型可以不一致,类似于表结构。
三维:数组、列表数组相对较少使用,多维数据结构列表可以包含上述所有数据结构
3、矢量
向量表示一系列数据,数据类型匹配,向量可以表示行或列
c )例如:
:例如: 1:10
seq(from )、to )、by )、length.out )、along.with ),长度与指定的向量长度相同)
提取子集:
数字下标(正数3360表示获取指定的要素,从1开始,负数3360表示排除) ) ) ) ) ) )。
which ) )函数(按条件过滤) )。
#矢量
(x1 )
(x2 )
x3
x4
x5
x5[1:5]
X5 [ c (1,2,3,4,5 ) ]
X5 [-1:-5 ]请勿添加#1- 5的要素
which(x55 ) #大于5的矢量下标
x5[which(x510 ) ] #大于5的矢量值
4、因子
因子用于分类变量,有类别
factor () )
总帐()。
#因子
f
f
美国类(f )视图因子
f
UNclass(f ) #
f1
f1
UNclass(F1 )。
5、矩阵
行和列
生成矩阵
矩阵() )
从向量派生
由向量的组合生成
操作
访问元素
矩阵命名
矩阵运算
矩阵加法
1 .矩阵n的各元素加n
2 .矩阵矩阵对应元素加法
矩阵乘法
1 .矩阵*n将各元素乘以n
2 .矩阵*矩阵矩阵的乘法(矩阵1 m行*n列矩阵2 p*q要求n==p的结果矩阵为m*q ) ) ) ) ) ) ) ) )。
3 .矩阵元素*将矩阵元素对应的元素相乘
单位矩阵
元素都是1 n*n方阵
对角矩阵
对角元素为1的其馀为0 n*n方阵
矩阵置换
n*m m*n
#矩阵
#创建矩阵:
#方法1 :使用矩阵(nrow=?ncol=? )
x
x
x
x
x
x
#方法2 :通过dim (a ) dim传递向量
A
dim(a ) )。
x
#方法用rbind或cbind拼接
x
y
z
m1=rbind(x,y,z ) #以行为单位进行连接
m2=cbind(x,y,z ) #以列为单位进行连接
m1
m2
获取#矩阵元素
x
x
x [ 1,2 ] #第1行第2列
第x[1,]#1行
第x[,2] #列
x[,c (2,3,4 ) ]#2)第3,4列
x [ c (1,2 ),]#1,第2行
x [ c (1,2 ),2:4] #第一行第二行第三列
#矩阵命名
是colnames(x )
是Rownames(x )
x[‘R1 ‘,’ C1′]
x[c(R1 ),) R2 ),c ),) C2 ) ]
#矩阵运算
m1
m2
m1
m2
#矩阵加法
m1 10 #矩阵n
m1 m2
#矩阵+矩阵
#矩阵乘法
m1*10 #矩阵*n
m1*m2 #矩阵对应元素相乘
m1 %*% t(m2) #矩阵*矩阵 矩阵乘法 行列相乘
#对角矩阵
diag(4) #4*4矩阵 对角元素都为1
diag(c(1,2,3,6)) #4*4矩阵,对角元素为1,2,3,6
x
diag(x) #显示矩阵x的对角元素值
#解方程组
m
m
b
solve(m,b) #m %*% x=b 求x
6、数据框
记录与域
#数据框
#创建数据框
a
fy = runif(10,10,20),
fmonth = 1:10 )
a[1,1]
a[1,]
a[,2]
a$fx #通过$fx取列信息
a[[1]]#通过[[]]获取列信息
search() #查询
attach(a) #attach 数据到 search路径
fx #直接使用
detach(a) #detach 数据
search() #查询
a
#新增修改列
a
fz=11:20})
#新增列
a$fz = 11:20
a$fz = a$fx+a$fy
#列存在则修改
a$fx = 1:10
#查询数据集
b = subset(a,fx>1&fmonth==8,select=c(fx,fmonth)) #select 列过滤,fx>1&fmonth==8 行过滤
b=edit(a) #修改后的数据集赋值给另一个数据集
b
fix(a) #直接修改数据集内容
a
7、列表
成分
创建列表
list()
操作
列表成分
[[]]
$
#列表
#创建列表
a
names(a)
c
c=a[‘y’] #在列表中通过[]取出的对象类型还是列表
c[2,1]
class(c) #查看类型为list
c=a[[‘y’]] #在列表中通过[[]]取出的对象类型为实际对象类型矩阵
c[2,1]
class(c) #查看类型为matrix
a$y[2,1] #获取矩阵的元素
8、数组
array
#数组
(a=array(1:60,c(3,4,5))) #数组三维
a[1,2,3]
9、数据类型转换
检查数据类型 is.开头
is.character
转换数据类型 as.开头
as.character
x=c(1:2,’hello’,T)
x
mode(x) #查看数据类型
class(x) #查看数据结构
is.vector(x)
y
mode(y) #数据类型是numeric
class(y) #数据结构是matrix
ydataframe
y
10、分之结构
if…else…结构
if(condition){…}
else{…}
ifelse函数
#分支结构
(Brand
#”Brand1″ “Brand2” “Brand3” “Brand4” “Brand5” “Brand6” “Brand7” “Brand8” “Brand9”
(PName
(Mem
#”1G” “2G” “4G” “1G” “2G” “4G” “1G” “2G” “4G”
(Feq=rep(c(‘2.2G’,’2.8G’,’3.3G’),each=3))
(Price=rep(c(1000,2000,5000),3))
PC=data.frame(Brand,PName,Mem,Feq,Price)
##分支结构
#if..else
PC
PC$PD=rep(‘Cheap’,9)
for (i in 1:nrow(PC)){ #1:nrow(PC)从第1行到最后一行
if (PC[i,’Price’]>3000){ #取值进行比较
PC[i,’PD’]=’Expensive’ #修改值
}
}
PC
#ifelse函数
PC$PD2=ifelse(PC$Price>3000,’Expensive’,’Cheap’) #向量化运算
PC
c
11、循环结构
for(n in x){…}
while(condition){…}
repeat{…break}
break next
#循环结构
for (x in 1:5){
print (x^2)
}
i=1
while (i<6){
print (i^2)
i=i+1
}
i=1
repeat {
print (i^2)
i=i+1
if (i>5) break
}
12、函数
自定义函数
myfunc =function(par1,par2,…){
…
}
引用函数文件
source(‘D:/basic.R’, encoding = ‘UTF-8’)
查看源码
myfunc #终端显示
page(myfunc) #用第三方编辑器查看
#函数
myadd=function(a,b,c){
return (a+b+c)
}
mystat=function(x,na.omit=FALSE){
if (na.omit){
x=x[!is.na(x)]
}
m=mean(x)
n=length(x)
s=sd(x)
skew=sum((x-m)^3/s^3)/n
return (list(n=n,mean=m,stdev=s,skew=skew))
}
13、向量化运算和apply家族
#向量化
x=1:5
(y=x^2)
(y=matrix(1:16,4,4))
(z=y^2)
(x=1:5)
(y=11:15)
(x+y)
y>=13
ifelse(x%%2==0,’A’,’B’)
x=data.frame(pv=rnorm(100,20,3),
uv=rnorm(100,40,4),
ip=runif(100,40,50))
apply(x,MARGIN = 2,mean)
apply(x,MARGIN = 2,quantile,probs=c(0.1,0.5,0.9))