加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言自学笔记(一)

(2015-06-17 09:18:17)
标签:

r

多重比较

折线图

#########存储格式为GB2312###########
setwd("D:\\desktop\\Desktop")#修改文件位置#
data<-read.csv(file="TEST1.csv",header=T)
data.mean<-aggregate(data[,-1],by=list(data$Treatment),FUN=mean) #计算数据各组中各列均值#
data.mean
data.sd<-aggregate(data[,-1],by=list(data$Treatment),FUN=sd) #计算数据各组中列标准差#
data.sd
for(i in 2:length(data)){
  test.s<-shapiro.test(data[,i])
  test.b<-bartlett.test(data[,i]~Treatment,data=data)
  print(colnames(data)[i])
  print(test.s$p.value)
  print(test.b$p.value)
} #样本的正态性检验及齐性检验#
library(agricolae)
for(j in 2:length(data)){
  result.aov<-aov(data[,j]~Treatment,data=data)
  result<-summary(result.aov)
  lsd<-LSD.test(result.aov,"Treatment") #LSD多重比较#
  hsd<-HSD.test(result.aov,"Treatment") #HSD多重比较#
  snk<-SNK.test(result.aov,"Treatment") #SNK多重比较#
  duncan<-duncan.test(result.aov,"Treatment",alpha=0.05) #邓肯多重比较#
  write.table(colnames(data)[j],file="anoval.csv",append=T,sep=",")
  write.table("duncan",file="anoval.csv",append=T,sep=",")
  write.table(duncan$groups,file="anoval.csv",append=T,sep=",")
} #对样品进行方差分析并进行多重比较#
data.mean<-data.mean[,-1]
data_2<-t(data.mean)#t()转置函数,但遇到问题是如果数据框中不全为数值型的,则转置之后所有数据都变为字符型#
data_new<-data.frame(danman=data_2[,1],shuangman=data_2[,2],duoman=data_2[,3])
data_new$Time<-seq(1,7,by=1)
mode(data_new)
str(data)
str(data_new)
data_sd<-data.sd[,-1]
data_3<-t(data_sd)
data_new2<-data.frame(danman_sd=data_3[,1],shuangman_sd=data_3[,2],duoman_sd=data_3[,3])
data_new2$Time<-seq(1,7,by=1)
mode(data_new2)
str(data_new2)
data_sum<-merge(data_new,data_new2,by.x="Time",by.y="Time")
data_sum<-as.data.frame(data_sum)
str(data_sum)
library(ggplot2)
for(z in 2:4){
  name_k<-colnames(data_sum)[z]
  p <- ggplot(data_sum,aes(x=Time,y=data_sum[,z]))+
          geom_line()+
         # ylim(0,max(data_sum[,z]))+
          geom_point(size=4,colour="blue",fill="white")+
          geom_errorbar(aes(ymin=data_sum[,z]-data_sum[,z+3],ymax=data_sum[,z]+data_sum[,z+3]),width=0.4)+
          labs(x="Time",y="Compound Concentration")+
          ggtitle(colnames(data_sum[z]))+
          theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank(),
                axis.line=element_line(size=1,colour="black"))+theme_bw()
  p
  ggsave(filename=paste(name_k,".png",sep=""), dpi = 300)#导出图片###
}

 这里有几个函数我觉得以后在处理数据时会经常用到:

aggregate(),统计各组数据(因子)中各列的平均值,标准差等;

包agricolae可以对数据进行多重比较并自动标记字母;

利用for循环可以达到批量处理数据的问题,上面的代码中利用for循环进行了批量多重比较,以及批量绘制折线图;

merge()可以将两个数据框合并为一个;

在编写过程中,遇到了几个问题已解决:

t()转置函数,如果数据框中不全为数值型的,则转置之后所有数据都变为字符型,需要注意;

批量保存图时,图的文件名在循环中如何修改?  name_k<-colnames(data_sum)[z],先将列名赋值给name_k, ggsave(filename=paste(name_k,".png",sep=""), dpi = 300),然后再利用paste()函数为filename赋值;

心得:在编写过程中要随着关注,数据表数据框的类型,结构;

未解决的问题:

1.很明显上面的编码有些笨拙,需要更精炼;

2. 输出的多重比较结果,表格格式需要进一步修改,在表格合并上需要进行进一步处理;

3. 折线图的绘制为一张图上多组折线,并标注多重比较的字母;

0

阅读 收藏 喜欢 打印举报/Report
前一篇:随笔二
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有