#File S1 (Yang et al. Sporocarp-associated fungal co-occurrence networks in a corn field revealed by long-read high-throughput sequencing, SEL)

library(dplyr)
library(data.table)

Full.length.assignments <- read.csv("YOUR.PATH/Full.length.assignments.csv", row.names=1)
ITS.full.assignments <- read.csv("YOUR.PATH/ITS.full.assignments.csv", row.names=1)
ITS1.assignments <- read.csv("YOUR.PATH/ITS1.assignments.csv", row.names=1)
ITS2.assignments <- read.csv("YOUR.PATH/ITS2.assignments.csv", row.names=1)
O18SV9.assignments <- read.csv("YOUR.PATH/Output.18SV9.assignments.unite.csv", row.names=1)

ITS.full.assignments=ITS.full.assignments[row.names(Full.length.assignments),]
ITS1.assignments=ITS1.assignments[row.names(Full.length.assignments),]
ITS2.assignments=ITS2.assignments[row.names(Full.length.assignments),]
O18SV9.assignments=O18SV9.assignments[row.names(Full.length.assignments),]

Full.length.assignments$OTUID = row.names(Full.length.assignments)
ITS.full.assignments$OTUID = row.names(Full.length.assignments)
ITS1.assignments$OTUID = row.names(Full.length.assignments)
ITS2.assignments$OTUID = row.names(Full.length.assignments)
O18SV9.assignments$OTUID = row.names(Full.length.assignments)

#Species
merged_annotations.species <- left_join(Full.length.assignments[c("OTUID","Species")], ITS.full.assignments[c("OTUID","Species")], by = "OTUID")
merged_annotations.species <- left_join(merged_annotations.species, ITS1.assignments[c("OTUID","Species")], by = "OTUID")
merged_annotations.species <- left_join(merged_annotations.species, ITS2.assignments[c("OTUID","Species")], by = "OTUID")
merged_annotations.species <- left_join(merged_annotations.species, O18SV9.assignments[c("OTUID","Species")], by = "OTUID")
row.names(merged_annotations.species) = merged_annotations.species$OTUID
merged_annotations.species=merged_annotations.species[,-1]
colnames(merged_annotations.species) = c("Species.Fulllength","Species.ITSFull","Species.ITS1","Species.ITS2","Species.18sv9" )

merged_annotations.species[merged_annotations.species == "na"] <- NA

df= merged_annotations.species
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.species.updated = df

#Genus
merged_annotations.genus <- left_join(Full.length.assignments[c("OTUID","Genus")], ITS.full.assignments[c("OTUID","Genus")], by = "OTUID")
merged_annotations.genus <- left_join(merged_annotations.genus, ITS1.assignments[c("OTUID","Genus")], by = "OTUID")
merged_annotations.genus <- left_join(merged_annotations.genus, ITS2.assignments[c("OTUID","Genus")], by = "OTUID")
merged_annotations.genus <- left_join(merged_annotations.genus, O18SV9.assignments[c("OTUID","Genus")], by = "OTUID")
row.names(merged_annotations.genus) = merged_annotations.genus$OTUID
merged_annotations.genus=merged_annotations.genus[,-1]
colnames(merged_annotations.genus) = c("Genus.Fulllength","Genus.ITSFull","Genus.ITS1","Genus.ITS2","Genus.18sv9" )

merged_annotations.genus[merged_annotations.genus == "na"] <- NA

df= merged_annotations.genus
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.genus.updated = df

#Family
merged_annotations.family <- left_join(Full.length.assignments[c("OTUID","Family")], ITS.full.assignments[c("OTUID","Family")], by = "OTUID")
merged_annotations.family <- left_join(merged_annotations.family, ITS1.assignments[c("OTUID","Family")], by = "OTUID")
merged_annotations.family <- left_join(merged_annotations.family, ITS2.assignments[c("OTUID","Family")], by = "OTUID")
merged_annotations.family <- left_join(merged_annotations.family, O18SV9.assignments[c("OTUID","Family")], by = "OTUID")
row.names(merged_annotations.family) = merged_annotations.family$OTUID
merged_annotations.family=merged_annotations.family[,-1]
colnames(merged_annotations.family) = c("Family.Fulllength","Family.ITSFull","Family.ITS1","Family.ITS2","Family.18sv9" )

merged_annotations.family[merged_annotations.family == "na"] <- NA

df= merged_annotations.family
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.family.updated = df

#Order
merged_annotations.order <- left_join(Full.length.assignments[c("OTUID","Order")], ITS.full.assignments[c("OTUID","Order")], by = "OTUID")
merged_annotations.order <- left_join(merged_annotations.order, ITS1.assignments[c("OTUID","Order")], by = "OTUID")
merged_annotations.order <- left_join(merged_annotations.order, ITS2.assignments[c("OTUID","Order")], by = "OTUID")
merged_annotations.order <- left_join(merged_annotations.order, O18SV9.assignments[c("OTUID","Order")], by = "OTUID")
row.names(merged_annotations.order) = merged_annotations.order$OTUID
merged_annotations.order=merged_annotations.order[,-1]
colnames(merged_annotations.order) = c("Order.Fulllength","Order.ITSFull","Order.ITS1","Order.ITS2","Order.18sv9" )

merged_annotations.order[merged_annotations.order == "na"] <- NA

df= merged_annotations.order
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.order.updated = df

#Class
merged_annotations.class <- left_join(Full.length.assignments[c("OTUID","Class")], ITS.full.assignments[c("OTUID","Class")], by = "OTUID")
merged_annotations.class <- left_join(merged_annotations.class, ITS1.assignments[c("OTUID","Class")], by = "OTUID")
merged_annotations.class <- left_join(merged_annotations.class, ITS2.assignments[c("OTUID","Class")], by = "OTUID")
merged_annotations.class <- left_join(merged_annotations.class, O18SV9.assignments[c("OTUID","Class")], by = "OTUID")
row.names(merged_annotations.class) = merged_annotations.class$OTUID
merged_annotations.class=merged_annotations.class[,-1]
colnames(merged_annotations.class) = c("Class.Fulllength","Class.ITSFull","Class.ITS1","Class.ITS2","Class.18sv9" )

merged_annotations.class[merged_annotations.class == "na"] <- NA

df= merged_annotations.class
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.class.updated = df

#Phylum
merged_annotations.phylum <- left_join(Full.length.assignments[c("OTUID","Phylum")], ITS.full.assignments[c("OTUID","Phylum")], by = "OTUID")
merged_annotations.phylum <- left_join(merged_annotations.phylum, ITS1.assignments[c("OTUID","Phylum")], by = "OTUID")
merged_annotations.phylum <- left_join(merged_annotations.phylum, ITS2.assignments[c("OTUID","Phylum")], by = "OTUID")
merged_annotations.phylum <- left_join(merged_annotations.phylum, O18SV9.assignments[c("OTUID","Phylum")], by = "OTUID")
row.names(merged_annotations.phylum) = merged_annotations.phylum$OTUID
merged_annotations.phylum=merged_annotations.phylum[,-1]
colnames(merged_annotations.phylum) = c("Phylum.Fulllength","Phylum.ITSFull","Phylum.ITS1","Phylum.ITS2","Phylum.18sv9" )

merged_annotations.phylum[merged_annotations.phylum == "na"] <- NA

df= merged_annotations.phylum
# 遍历数据框的每一行
for (i in 1:nrow(df)) {
  # 检查第一列是否为 NA
  if (is.na(df[i, 1])) {
    # 如果是 NA，则查找该行中的非 NA 值
    for (j in 2:ncol(df)) {
      if (!is.na(df[i, j])) {
        # 找到非 NA 值，替换第一列的 NA，并退出内层循环
        df[i, 1] <- df[i, j]
        break
      }
    }
  }
}

merged_annotations.phylum.updated = df

merged_annotations.phylum.updated <- select(merged_annotations.phylum.updated,-c(Phylum.ITSFull,Phylum.ITS1,Phylum.ITS2,Phylum.18sv9))
merged_annotations.class.updated <- select(merged_annotations.class.updated,-c(Class.ITSFull,Class.ITS1,Class.ITS2,Class.18sv9))
merged_annotations.order.updated <- select(merged_annotations.order.updated,-c(Order.ITSFull,Order.ITS1,Order.ITS2,Order.18sv9))
merged_annotations.family.updated <- select(merged_annotations.family.updated,-c(Family.ITSFull,Family.ITS1,Family.ITS2,Family.18sv9))
merged_annotations.genus.updated <- select(merged_annotations.genus.updated,-c(Genus.ITSFull,Genus.ITS1,Genus.ITS2,Genus.18sv9))
merged_annotations.species.updated <- select(merged_annotations.species.updated,-c(Species.ITSFull,Species.ITS1,Species.ITS2,Species.18sv9))
Final.assignmments=cbind(merged_annotations.phylum.updated, merged_annotations.class.updated,merged_annotations.order.updated,merged_annotations.family.updated, merged_annotations.genus.updated, merged_annotations.species.updated)
Final.assignmments=cbind(merged_annotations.kingdom.updated, merged_annotations.phylum.updated, merged_annotations.class.updated,merged_annotations.order.updated,merged_annotations.family.updated, merged_annotations.genus.updated, merged_annotations.species.updated) ###kingdom level
setwd("Your.PATH/")
write.table(Final.assignmments,file="Final.assignments.txt",row.names = T, quote = F, sep = "\t") 