#Functions to support MEMAs printed in 8 well plates
#'Melt raw population dataset to combine wells
#'
#'\code{melt8Well} Converts a Tecan ArrayPro data file to a data.table with properly labeled columns.
#'
#'@param DT a data.table with columns of population intensity values in columns named by barcode, well, wavelength and data type(Raw/Net/Background)
#'@param swap a logical on whether the data for the A and B rows should be swapped. This must be yes for 8 well data coming from the Array Pro software.
#'@return A data.table in long format with columns of intensity readings for #' each data type and wavelength, barcode and well.
#'@section Usage: This function reformats Array Pro results files that
#' come from analyzing images from multiple channels, wells and plates.
#' The column names are encoded as follows:
#' Datatype is at the beginning of the column name as Raw, Net or
#' Background. Barcode follows the curly brace symbol. Wavelength follows
#' the - symbol after the barcode. Well follows the - symbol after the
#' wavelength. The A and B well labels are swapped to align the Tecan
#' labeling to the actual well names.
#' @importFrom "data.table" ":="
#' @export
melt8Well<-function(DT,swap = TRUE){
intNames<-grep("Background|Net|Raw",colnames(DT), value = TRUE)
intNameType<-lapply(intNames,function(intName){
return(strsplit(intName,split=" ")[[1]][1])
})
intNameWL<-lapply(intNames,function(intName){
return(strsplit(intName,split="-")[[1]][2])
})
intNameWell<-lapply(intNames,function(intName){
return(strsplit(intName,split="-")[[1]][3])
})
intNameBarcode<-lapply(intNames,function(intName){
tmp<-strsplit(intName,split="[{]")[[1]][2]
return(strsplit(tmp,split="-")[[1]][1])
})
newIntNames<-make.names(paste(intNameType,intNameWL,intNameWell,intNameBarcode))
data.table::setnames(DT,colnames(DT[,intNames, with=FALSE]),newIntNames)
meltDT<-reshape2::melt(DT,measure=newIntNames,variable="TypeWLWellBarcode",value="Intensity", variable.factor=FALSE)
meltDT$Type<-unlist(lapply(meltDT$TypeWLWellBarcode,function(x){
return(strsplit(x,split="[.]")[[1]][1])
}))
meltDT$WL<-unlist(lapply(meltDT$TypeWLWellBarcode,function(x){
return(strsplit(x,split="[.]")[[1]][2])
}))
meltDT$Well<-unlist(lapply(meltDT$TypeWLWellBarcode,function(x){
well<-strsplit(x,split="[.]")[[1]][3]
wellChars<-strsplit(well,"")
Well<-paste0(wellChars[[1]][1],"0",wellChars[[1]][2])
return(Well)
}))
meltDT$Barcode<-unlist(lapply(meltDT$TypeWLWellBarcode,function(x){
return(strsplit(x,split="[.]")[[1]][4])
}))
meltDT[,TypeWLWellBarcode:=NULL]
meltDT$Type<-paste(meltDT$Type,meltDT$WL,sep=".")
#Delete the Wavelength only column
meltDT[,WL:=NULL]
data.table::setnames(meltDT,colnames(meltDT),make.names(colnames(meltDT)))
#wide format creating columns of data organized by type and wavelength
DT<-reshape2::dcast(meltDT,...~Type,value.var="Intensity")
if (swap){
#Swap A and B well names to align Tecan labeling to the actual well names
DT$Well <- gsub("A","T",DT$Well)
DT$Well <- gsub("B","A",DT$Well)
DT$Well <- gsub("T","B",DT$Well)
}
DT<-data.table::data.table(DT,key=c("Well","Barcode"))
return(DT)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.