R 语言-基础

来源:互联网 时间:2016-09-13

R语言 1997年成为GNU项目 开源免费

R官方网址 www.r-project.org

R是数据分析领域的语言小巧灵活,通过扩展包来增强功能绘图功能代码简单

开发环境R + RStudio

 

1、数据类型character 字符numeric 数值型,实数或小数integer 整型complex 复数型logical 逻辑型 类似于boollean

2、数据结构Vector 向量Factor 因子Array 数组Matrix 矩阵Data Frame 数据框List 列表

一维:向量、因子 向量属于数值型变量,因子对应于分类变量二维:矩阵、数据框 矩阵中元素的数据类型是一致的,数据框由向量组成,每个向量中的数据类型保持一致,向量间的数据类型可以不一致,类似于表结构。三维:数组、列表 数组用的比较少,多维数据结构;列表可以包含上面所有的数据结构

3、向量向量表示一组数据,数据类型一致,向量可以表示行或者列c() 如: : 如: 1:10seq(from(开始), to(到), by(步长), length.out(指定向量的元素个数), along.with(长度与指定的向量长度相同))

提取子集:数字下标(正数:获取指定元素,从1开始,负数:排除的意思)which()函数(按条件来进行筛选)

#向量

(x1<- c(10,11,12,13))

(x2<- 1:10)

x3<- seq(1,5,1) #from 1 to 5 by 1

x4<- seq(5,by=2,length.out=8) #向量中元素个数为8

x5<- seq(2,by=3, along.with = x4) # along.with向量个数与x4一致

x5[1:5]

x5[c(1,2,3,4,5)]

x5[-1:-5] #不要下标为1-5的元素

which(x5>5) #大于5的向量下标

x5[which(x5>10)] #大于5的向量值

 

4、因子因子用于分类变量,有类别factor()gl()

#因子

f<-c('a','a','b','o','ab','ab')

f<-factor(c('a','a','b','o','ab','ab')) #创建因子,level默认按字母排序

unclass(f) #查看因子

f<-factor(c('a','a','b','o','ab','ab'),levels = c('a','b','o','ab')) #指定因子对应的level

unclass(f) #

f1<- gl(4,3,labels = c('blue','red','green','yellow')) #4个级别,每个级别重复3次,labels的内容

f1

unclass(f1)

 

5、矩阵行和列

生成矩阵matrix()由向量派生由向量组合生成

操作访问元素行列命名

矩阵运算 矩阵加法 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

#矩阵

#创建矩阵:

#方法一:使用matric(nrow=?,ncol=?)

x<-matrix(nrow=2,ncol=3) #nrow 指定行, ncol指定列

x

x<-matrix(1:18,nrow = 3,ncol = 6) # 3行,6列,元素值由1:18填充,默认一列一列顺序填充

x

x<-matrix(1:18,nrow = 3, ncol = 6, byrow = T) # 3行,6列,元素值由1:18填充,指定行顺序填充

x

#方法二: dim(a) 通过dim 传递向量

a<-1:18

dim(a)<-c(3,6) #3行6列,行顺序填充

x

#方法三: rbind或cbind进行拼接

x<-1:10

y<-11:20

z<-21:30

m1 = rbind(x,y,z) #以行为单位进行拼接

m2 = cbind(x,y,z) #以列为单位进行拼接

m1

m2

#获取矩阵元素

x<-matrix(1:18,nrow = 3,ncol = 6,byrow = T)

x

x[1,2] #第1行第2列

x[1,] #第1行

x[,2] #第2列

x[,c(2,3,4)] #第2 3 4列

x[c(1,2),] #第1 2行

x[c(1,2),2:4] #第1 2行 第2 3 4列

#行列命名

colnames(x)<-c('C1','C2','C3','C4','C5','C6') #列的名字

rownames(x)<-c('R1','R2','R3') #行的名字

x['R1','C1']

x[c('R1','R2'),c('C1','C2')]

#矩阵运算

m1<-matrix(1:18,nrow = 3,ncol = 6, byrow = T)

m2<-matrix(19:36,nrow = 3, ncol = 6, byrow = T)

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<-matrix(1:16,4,4)

diag(x) #显示矩阵x的对角元素值

#解方程组

m<-diag(4)

m

b<-1:4

solve(m,b) #m %*% x=b 求x

 

6、数据框记录与域

#数据框

#创建数据框

a<-data.frame(fx = rnorm(10,10,2),

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<-with(a, fx) #访问数据框成员

#新增修改列

a<-within(a,{fx=1:10 #通过within来进行修改,和新增列

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<-list(x=1:10,y=matrix(1:16,4,4),z=data.frame())

names(a) <- c('c1','c2','c3') #修改成分名称

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<-matrix(1:20,c(4,5))

mode(y) #数据类型是numeric

class(y) #数据结构是matrix

y<-as.data.frame(y) #数据类型转换matrix->dataframe

y

 

10、分之结构if...else...结构 if(condition){...} else{...}

ifelse函数

#分支结构

(Brand<-paste(c('Brand'),1:9,sep='')) #粘合一起

#"Brand1" "Brand2" "Brand3" "Brand4" "Brand5" "Brand6" "Brand7" "Brand8" "Brand9"

(PName<-paste(c('Dell'),1:9,sep=' '))

(Mem<-rep(c('1G','2G','4G'),times=3)) #重复

#"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))

 

相关阅读:
Top