获得的方差表是排在一列上的,需要整合成发表格式。

options(digits = 4)
var <- read.csv("D:/R/Spatial_Compete/results/che/res/var.csv")
str(var)
## 'data.frame':    140 obs. of  5 variables:
##  $ X                  : Factor w/ 5 levels "block","genetic",..: 3 2 4 3 2 5 4 3 2 5 ...
##  $ model              : Factor w/ 4 levels "ar","base","spl",..: 2 2 2 3 3 3 3 1 1 1 ...
##  $ trait              : Factor w/ 9 levels "alfacel","d05",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ Estimated.variances: num  1.336 0.957 1.633 0.58 0.338 ...
##  $ S.E.               : num  0.1 0.28 0.196 NA NA NA NA 0.044 0.11 0.116 ...
knitr::kable(head(var))
X model trait Estimated.variances S.E.
Plot base h05 1.336 0.100
genetic base h05 0.957 0.280
Residual base h05 1.633 0.196
Plot spl h05 0.580 NA
genetic spl h05 0.338 NA
spatial spl h05 5.953 NA
# 性状的个数
trait_name <- levels(var$trait)
var.temp <- matrix(,length(trait_name)*4,12)
for(trait.i in 1: length(trait_name)){
  var_trait <- subset(var,trait==trait_name[trait.i])
  # 模型的个数
  model_name <- levels(factor(var_trait$model))
  # 把单个性状内的所有模型结果行放到这个矩阵中,一共4个模型,5个组分5个se,11和12列分别放模型名称和性状名称
  var_trait.temp <- matrix(,4,12)
  for(model.i in 1:length(model_name)){
    var_trait_model <- subset(var_trait,model==model_name[model.i])
    # 一个单行空矩阵,把一个性状内一个模型的个组分估计及se放到一行中
    var_trait_model.temp <- matrix(,1,dim(var_trait_model)[1]*2)
    for(var.i in 1:dim(var_trait_model)[1]){
      var_trait_model.temp[1,(2*var.i-1):(2*var.i)] <- var_trait_model[var.i,4]
      var_trait_model.temp[1,(2*var.i)] <- var_trait_model[var.i,5]
    }
    var_trait.temp[model.i,1:dim(var_trait_model.temp)[2]] <- var_trait_model.temp[1,]
    # 有的模型没有结果,所以维度报错,这里假设缺失一个模型
    if (length(model_name)<4) model_name <- c(model_name,"NA")
    var_trait.temp[,11] <- as.matrix(model_name)
    var_trait.temp[,12] <-trait_name[trait.i]
  }
  var.temp[(trait.i*4-3):(trait.i*4),] <- var_trait.temp[1:4,]
}
var.temp <- as.data.frame(var.temp)
# 列名
colnames(var.temp) <- c(rep(c("Est","se"),5),"model","trait")
knitr::kable(head(var.temp))
Est se Est se Est se Est se Est se model trait
3.757 0.196 4.962 0.068 0 0 0.183 0.003 NA NA ar alfacel
3.757 0.383 4.962 0.263 0.183 0.075 NA NA NA NA base alfacel
NA NA NA NA NA NA NA NA NA NA spl alfacel
NA NA NA NA NA NA NA NA NA NA splar alfacel
0.102 0.076 0.197 0.114 1.06 0.146 4.892 0.151 NA NA ar d05
0.788 0.095 0.224 0.133 5.311 0.152 NA NA NA NA base d05
# 结果保存路径
path_save_res <- "D:/R/Spatial_Compete/results/che/res/"
name_save <- paste(path_save_res, "var_adj.csv",sep="")
# write.csv(var.temp,name_save)