library(stringr)
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'tibble' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ purrr     1.2.1
## ✔ forcats   1.0.1     ✔ readr     2.2.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Load in all the data files: CC, MF, and BP.

CC <- read.table("~/Desktop/BIN521L/labels_CC.csv",sep = "\n", header = FALSE, stringsAsFactors = FALSE)
MF <- read.table("~/Desktop/BIN521L/labels_MF.csv",sep = "\n", header = FALSE, stringsAsFactors = FALSE)
BP <- read.table("~/Desktop/BIN521L/labels_BP.csv",sep = "\n", header = FALSE, stringsAsFactors = FALSE)

Create a concise file for all three data sets. Separate the files into three coloumns, and name each coloumn. Remove any extra rows that have no named genes, and the status coloumn.

datalist <- list(CC,MF,BP)
datalist <- lapply(datalist, function(x) {str_split_fixed(x$V1, ",", 3)})
datalist <- lapply(datalist, as.data.frame)
datalist[[1]] <- setNames(datalist[[1]], c("gene", "status", "CC"))
datalist[[2]] <- setNames(datalist[[2]], c("gene", "status", "MF"))
datalist[[3]] <- setNames(datalist[[3]], c("gene", "status", "BP"))
datalist <- lapply(datalist, function(x) {
  x <- x[x$gene != "gene", ]
  x <- x[!grepl("_", x$gene), ]
  x})
datalist <- lapply(datalist, function(x) {
  x$status <- NULL
  x})

Merge together all of the three datafiles. Look at the final product and then download it as a new csv file.

merged <- Reduce(function(x, y) merge(x, y, by = "gene"), datalist)
head(merged)
##      gene                       CC                           MF
## 1 YAL001C                    nucle RNA polymerase,transcription
## 2 YAL002W                 membrane                             
## 3 YAL003W                                                      
## 4 YAL004W       cellular_component           molecular_function
## 5 YAL005C membrane,nucle,cytoplasm                     tRNA,ATP
## 6 YAL007C                                    molecular_function
##                                                            BP
## 1                                                 ion,protein
## 2                                 protein,targeting,transport
## 3                                     ion,regulation,negative
## 4                                          biological_process
## 5 protein,ion,targeting,catabolic process,negative,regulation
## 6                                       protein,ion,transport
write.csv(merged, "yeastPt1", row.names = FALSE)