目录
1、流程控制
-
for 循环:
for(i in a:b){要循环的语句}
for(i in 1:10){print(2*i)}
## [1] 2
## [1] 4
## [1] 6
## [1] 8
## [1] 10
## [1] 12
## [1] 14
## [1] 16
## [1] 18
## [1] 20
- while循环:
while(判断语句){要循环的语句}
a<-0
i<-0
while(i<=5){
a=i+5*a
print(a)
i<-i+1
}## [1] 0
## [1] 1
## [1] 7
## [1] 38
## [1] 194
## [1] 975a
## [1] 975
- 条件语句:
3种:
if(条件语句){执行语句}
if(条件语句){执行语句} else{执行语句}
if(条件语句){执行语句} else if(条件语句){执行语句}
2、自编函数
(函数名称)<-function(x1,x2,……){函数主体}
3、数据操作
R中最基本结构为向量,所以可以在其中进行向量的加/减/乘/除/幂运算,当2向量长度不同就会出现循环运算。
- 基本运算
a<-c(1,2,3,4)
b<-c(2,4,6,7)
a+b## [1] 3 6 9 11
a*b
## [1] 2 8 18 28
a^b
## [1] 1 16 729 16384
同样2个矩阵/数据框等也可进行加/减/乘/除/幂运算.
m1<-matrix(1:6,3)
m2<-matrix(11:16,3)
m1-m2## [,1] [,2]
## [1,] -10 -10
## [2,] -10 -10
## [3,] -10 -10m1+m2
## [,1] [,2]
## [1,] 12 18
## [2,] 14 20
## [3,] 16 22m1*m2
## [,1] [,2]
## [1,] 11 56
## [2,] 24 75
## [3,] 39 96m1/m2
## [,1] [,2]
## [1,] 0.09090909 0.2857143
## [2,] 0.16666667 0.3333333
## [3,] 0.23076923 0.3750000m1^m2
## [,1] [,2]
## [1,] 1 2.684355e+08
## [2,] 4096 3.051758e+10
## [3,] 1594323 2.821110e+12
- 取整函数:
round( )四舍五入;
ceiling( ),向上取整,大于该数的最小整数;
floor( )向下取整,小于该数的最大整数;
trunc( )直接舍去小数部分。
round(4.7)
## [1] 5
trunc(4.7)
## [1] 4
ceiling(4.7)
## [1] 5
floor(4.7)
## [1] 4
- 数学计算函数:
log( ):可以通过base参数指定对数的底,默认为自然底数。log2( ),log10( )固定以2,10为底数
log(100,base = 10)
## [1] 2
log(144,base=12)
## [1] 2
cumsun( ),cumprod( )累积求和,累积求积
- 统计函数:
median( )中位数
quantile( )分位数
scale( )标准化数据,根据公式进行数据标准化,其中标准差可以任意指定
a<-1:100
quantile(a,prob=c(0.25,0.5,0.75))## 25% 50% 75%
## 25.75 50.50 75.25
scale(1:4)#1:4标准差为1.290994,均值为2.5。在这里是取标准差为1.29缩放数据
## [,1]
## [1,] -1.1618950
## [2,] -0.3872983
## [3,] 0.3872983
## [4,] 1.1618950
## attr(,"scaled:center")
## [1] 2.5
## attr(,"scaled:scale")
## [1] 1.290994
scale(1:4,scale=2)#在这里是取标准差为2缩放数据
## [,1]
## [1,] -0.75
## [2,] -0.25
## [3,] 0.25
## [4,] 0.75
## attr(,"scaled:center")
## [1] 2.5
## attr(,"scaled:scale")
## [1] 2
- 文本函数:
nchar( )返回向量中每个字符串的长度 。
substr(x,star,stop)提取字符向量x中的各个元素的一部分,从每一个元素的第几个字符开始,以每一个元素中的第几个字符结束。 strsplit(x,split= )把字符向量x按照split指定的字符分割。
a<-c("vhg","hjggj","kjhhkhjkhghf")
nchar(a)## [1] 3 5 12
substr(a,2,4)
## [1] "hg" "jgg" "jhh"
strsplit(a,split = 'g')
## [[1]]
## [1] "vh"
##
## [[2]]
## [1] "hj" "" "j"
##
## [[3]]
## [1] "kjhhkhjkh" "hf"
cat( )函数可以把字符串拼接在一起,可以通过“”进行换行或通过fill设置每行长度,sep= 设置分隔符
cat('jhjj','jhjj','sdfdsfdfd',sep="")
## jhjjjhjjsdfdsfdfd
cat('jhjj','jhjj \n ','sdfdsfdfd',sep="")
## jhjjjhjj
## sdfdsfdfd
paste( )对向量的每个数据进行拼接,再返回一个向量.还可以每一个元素后面加同一个字符,这对于变量的命名是很方便的。
paste(c("a","d"),c("r","g","d"))
## [1] "a r" "d g" "a d"
paste(c("a","b","c","d"),".csv",sep=",")
## [1] "a,.csv" "b,.csv" "c,.csv" "d,.csv"
toupper( )把字母全变成大写
tolower( )把字母全变成小写
toupper(c("jhjhjh","jshkjh"))
## [1] "JHJHJH" "JSHKJH"
tolower(c("JHJHJjgjh","jhjkhRTDRESR"))
## [1] "jhjhjjgjh" "jhjkhrtdresr"
4、apply函数族
作用:类似于循环,但比循环简单
apply(x,MARGIN,FUN) MARGIN=1,函数应用于X的每一行;=2每一列 FUN指明应用的函数
a<-c(1,2,3)
b<-c(3,4,2)
d<-c(4,5,6)
(x<-data.frame(a,b,d))## a b d
## 1 1 3 4
## 2 2 4 5
## 3 3 2 6(e<-matrix(1:6,3))
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6apply(x,MARGIN = 1,FUN = sum)
## [1] 8 11 11
apply(e, 2, sum)
## [1] 6 15
tapply(X,INDEX,FUN)对向量进行汇总。按照INDEX指定的变量进行分类汇总,并计算FUN指定的函数值
library(Ecdat) #加载数据集
data(Earnings)
head(Earnings,15)## age y
## 1 g3 569.5
## 2 g3 895.5
## 3 g3 1111.0
## 4 g3 1182.0
## 5 g3 1277.5
## 6 g3 1384.0
## 7 g3 1464.5
## 8 g3 2453.0
## 9 g3 2538.0
## 10 g3 2539.5
## 11 g3 2830.5
## 12 g3 2852.0
## 13 g3 2865.0
## 14 g3 2945.0
## 15 g3 3023.0tapply(Earnings$y, Earnings$age, mean)#按照年龄段分类汇总,并计算出每一类的均值
## g1 g2 g3
## 22880.48 25080.17 27973.63
lapply( )对列表/向量中的每一个元素执行1个函数,返回值是列表。只有2个参数
list1<-list(c(1:5),c(1:4),c(1:3))
lapply(list1,sum)## [[1]]
## [1] 15
##
## [[2]]
## [1] 10
##
## [[3]]
## [1] 6
sapply,mapply与lapply类似。