works_with_R("3.0.2", reshape2="1.2.2") samp.f <- "Vervet_intestinal_samples.csv" samp.info <- read.csv(samp.f, skip=1, nrows=23, check.names=FALSE, na.strings="") names(samp.info) <- tolower(names(samp.info)) samp.info$monkey <- samp.info$wfid samp.info$years <- samp.info$age f <- "V13A-Matrix-55mer-SixtyFour-Nov21-2013-FilesWithHostDNA.csv" ## The first few rows describe the samples. There are several samples ## per monkey, and some samples were re-sequenced. sample.transpose <- read.table(f, nrow=15, sep=",", colClasses="character") sample.char <- t(sample.transpose) sample.df <- as.data.frame(sample.char[-(1:2),]) names(sample.df) <- sample.char[1,] write.csv(sample.df, "samples.csv", row.names=FALSE) samples <- read.csv("samples.csv", check.names=FALSE) pattern <- paste0("(?[0-9]+)", "(?[^/]+)?", "/", "(?[A-Za-z]+)") match <- str_match_perl(as.character(samples$Org), pattern) ## Nikoleta wrote "The samples highlighted in pink have a high level ## of contamination with host DNA, so best to exclude them." pink.samples <- c("1588/Ti", "1588/Ei", "1588/Du", "1232/Ti", "1232/Tc", "1232/Si", "1232/Sc", "1109/Ti", "1101/Ei") samples$contamination <- ifelse(samples$Org %in% pink.samples, "hostDNA", "none") stopifnot(sum(samples$contamination=="hostDNA") == length(pink.samples)) samples$run <- samples[["Run#"]] samples$monkey <- as.integer(match[,"monkey"]) samples$experiment <- factor(ifelse(match[,"resequenced"]=="April", "reseqApril", "sequenced")) location.codes <- c(Re="rectum", Tc="transverse colon", Ce="cecum", Ti="terminal ileum", Sc="sigmoid colon", Du="duodenum", SigCol="sigmoid colon", Rectum="rectum", Si="small intestine", Ei="small intestine", # TODO: verify with Nikoleta! Cecum="cecum", TransCol="transverse colon") location.order <- c("duodenum", "small intestine", "terminal ileum", "cecum", "transverse colon", "sigmoid colon", "rectum") samples$location <- factor(location.codes[match[,"location_code"]], rev(location.order)) ## The last rows are the count data of the 55-mers found. count.df <- read.table(f, skip=16, sep=",", row.names=2) stopifnot(nchar(as.character(count.df[,1]))==55) names(count.df)[1] <- "55mer" count.mat.t <- as.matrix(count.df[,-1]) stopifnot(ncol(count.mat.t)==nrow(samples)) count.mat <- t(count.mat.t) names(dimnames(count.mat)) <- c("sample", "id55mer") rownames(count.mat) <- 1:nrow(count.mat) prop.mat <- count.mat/apply(count.mat, 1, sum) stopifnot(apply(prop.mat, 1, sum) == 1) id.cols <- c("monkey", "location", "experiment", "run", "contamination", "Total Words(55-mers)", "Total Frequency of Words 55-mers") sample.counts <- data.frame(samples[,id.cols], prop.mat, check.names=FALSE) counts <- melt(sample.counts, id=id.cols, value.name="reads", variable.name="id55mer") ## Some 55mer-specific info... vervet <- list(samples=samples, counts=counts, monkeys=samp.info) save(vervet, file="vervet.RData")