#一句话函数
#遍历列表的函数 lapply,总是返回列表
str(lapply)
x<-list(a=1:10,b=c(11,21,31,41,51))
lapply(x,mean)
x<-1:4
lapply(x, runif)#默认从0-1抽取
lapply(x, runif,min=0,max=100)
x<-list(a=matrix(1:6,2,3),b=matrix(4:7,2,2))
lapply(x,function(m) m[1,])
#sapply,结果列表元素长度都是1返回向量,
#结果列表长度相同且大于1时返回矩阵
x<-list(a=1:10,b=c(11,21,31,41,51))
sapply(x, mean)
#apply
x<-matrix(1:16,4,4)
x
apply(x, 2,mean)#对第2维度进行操作
x<-matrix(rnorm(100),10,10)
x
apply(x,1,quantile,probs=c(0.25,0.75))
x<-array(rnorm(2*3*4),c(2,3,4))
apply(x,c(1,3),mean)#第1维和第2维的平面沿着第3维求均值
apply(x,c(1,2),mean)
apply(x,c(2,3),mean)
#mapply ,lapply的多元版本
list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))
mapply(rep,1:4,4:1)
s<-function(n,mean,std){rnorm(n,mean,std)}
s(4,0,1)#从均值为0,标准差为1的正态分布里抽取4个数据
mapply(s,1:5,5:1,2)
list(s(1,5,2),s(2,4,2),s(3,3,2),s(4,2,2),s(5,1,2))
#tapply对向量的子集进行操作
#tapply(向量,因子/因子列表,函数/函数名)
x<-c(rnorm(5),runif(5),rnorm(5,1))
x
f<-gl(3,5)#生成因子水平,3个水平每个水平5个元素
f
#对向量X按照因子的水平进行分组,对每组求均值
tapply(x,f,mean)
tapply(x,f,mean,simplify = FALSE)
#split函数
#根据因子或因子列表将向量或其他对象分组,
#通常与lapply一起使用
#aplit(向量/列表/数据框,因子/因子列表)
x<-c(rnorm(5),runif(5),rnorm(5,1))
f<-gl(3,5)#生成因子水平,3个水平每个水平5个元素
split(x,f)
lapply(split(x,f), mean)
head(airquality)
s<-split(airquality,airquality$Month)
s
table(airquality$Month)
lapply(s, function(x) colMeans(x[,c('Ozone','Wind','Temp')]))
sapply(s, function(x) colMeans(x[,c('Ozone','Wind','Temp')]))
lapply(s, function(x) colMeans(x[,c('Ozone','Wind','Temp')],na.rm = TRUE))
sapply(s, function(x) colMeans(x[,c('Ozone','Wind','Temp')],na.rm=TRUE))
#排序
x<-data.frame(v1=1:5,v2=c(10,7,9,6,8),v3=11:15,v4=c(1,1,2,2,1))
x
sort(x$v2)#升序
sort(x$v2,decreasing = TRUE)
order(x$v2)
x[order(x$v2),]
x[order(x$v4,x$v2),]
#总结数据信息
head(airquality)
head(airquality,10)
tail(airquality)
summary(airquality)
str(airquality)
table(airquality$Ozone)
table(airquality$Ozone,useNA = 'ifany')
table(airquality$Month,airquality$Day)
is.na(airquality$Ozone)
any(is.na(airquality$Ozone))#是否有缺失值
sum(is.na(airquality$Ozone))
all(airquality$Month<12)
tianic<-as.data.frame(Titanic)
head(tianic)
dim(tianic)
summary(tianic)
x<-xtabs(Freq~Class +Age ,data = tianic)
ftable(x)#排版扁平化
object.size(airquality)
print(object.size(airquality),units = kb)
print(object.size(airquality),units = 'kb')
print(object.size(airquality),units = 'Kb')
sapply和split通常与lapply结合使用
head 可以更改行数
小结