R 语言入门基础知识(2)

#创建数据框
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))

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/597740ac789208faa2f46f4d684c446c.html