library(reshape2)
##----------------------------------------------------melt----------------------------------------------------
head(melt(airquality,id.vars = c('Month','Day'))) ##measure.vars是合在一起的列,id.vars是不变的列拆分数据
melt(airquality,id.vars = colnames(df)[1:3]))
##----------------------------------------------------dcast----------------------------------------------------
df3 <- dcast(df2,formula = Chloronema+Gametophore~variable,value.var = c("value"))##不变~变 value.var=变后的值
library(tidyr)

##--------------------------------自编函数----------------------------------------------------
myfun <- function(x){plot <- data.frame(sum=sum(x),max=max(x),min=min(x),mean=mean(x))
return(plot)
}
myfun <- function(x,y){df <- x*x+y
return(df)
}
##--------------------------------apply----------------------------------------------------
apply(df, margin, ...)  ##margin参数 1=行,2=列,3=第几个(可填一个或多个) FUN参数 执行命令
apply(df,1,sum) ##按行求和
apply(df,2,mean,na.rm=T) ##按列求平均值
apply(df,c(1,2),mean,na.rm=T) 
##--------------------------------lapply&sapply----------------------------------------------------
lapply(x,FUN = )  ##x:list  fun:执行的命令 输出数据类型为列表
sapply(x,FUN = )  ##输出数据类型为矩阵
##--------------------------------aggregate----------------------------------------------------
##第一种形式
aggregate(data,by,FUN)##data:数据 by:变量名,必须是list fun:函数
trees$type <- c(rep(1:3,each=10),1)
head(trees)
aggregate(trees,by = list(trees$type),FUN = mean)
##第二种形式
aggregate(formula,data,FUN) ##formula:公式 计算变量~依据变量 data:数据 FUN:函数
aggregate(.~type,data = trees,FUN = mean)    ## . 代表其他数据 计算变量~依据变量
aggregate(cbind(Girth,Height)~type,data = trees,FUN=mean) 
aggregate(Girth+Height~type,data = trees,FUN=mean) ##  +代表两列数据相加后的结果
aggregate(Girth~type+age,data = trees,FUN=mean) ##依据变量中+表示不同的因子