[R] Extract data from Array to Table
Sven E. Templer
sven.templer at gmail.com
Thu Feb 12 09:11:23 CET 2015
see inline
On 12 February 2015 at 09:10, Sven E. Templer <sven.templer at gmail.com> wrote:
> Make use of the plyr and reshape2 package (both on CRAN):
>
I forgot:
library(reshape2)
> library(plyr)
> d<-adply(ArrayDiseaseCor, 1:2)
> # adply calls function identity by default
> d<-melt(d)
> d<-subset(d,value>.5)
> head(d)
>
> You will have to rename columns, or adjust arguments in melt/adply.
> Note: use set.seed before sampling for reproducible code!
>
> Best, S.
>
> On 11 February 2015 at 17:11, Karim Mezhoud <kmezhoud at gmail.com> wrote:
>> Dear All,
>> I am facing the task to extract data from array to table. here an example
>> of array.
>>
>> ##Get A list of Matrices with unequal rows
>>
>> Disease <- NULL
>> Diseases <- NULL
>> ListMatByGene <- NULL
>> for(i in 1:3){
>>
>> Disease[[i]] <-matrix(sample(-30:30,25+(5*
>> i)),5+i)
>> rownames(Disease[[i]]) <- paste0("Sample",1:(5+i))
>> colnames(Disease[[i]]) <- paste0("Gene",1:5)
>>
>> D <- paste0("Disease",i)
>> Diseases[[D]] <- Disease[[i]]
>> }
>>
>>
>> ## get the same Column from all matrices
>> getColumn <- function(x, colNum, len = nrow(x)){
>> y <- x[,colNum]
>> length(y) <- len
>> y
>> }
>>
>> ## get Matrices by the same columns of the list of matrices
>> getMatrices <- function(colNums, dataList = x){
>> # the number of rows required
>> n <- max(sapply(dataList, nrow))
>> lapply(colNums, function(x, dat, n) { # iterate along requested columns
>> do.call(cbind, lapply(dat, getColumn,x, len=n)) # iterate along
>> input data list
>> }, dataList, n)
>> }
>>
>> ## Rotate the list of matrices by 90°
>> G <- paste0("Gene",1:5)
>> ListMatByGene[G] <- getMatrices(c(1:ncol(Diseases[[1]])),dataList=Diseases)
>>
>> ## get Disease correlation by gene
>> DiseaseCorrelation <- lapply(ListMatByGene,function(x) cor(x,use="na",
>> method="spearman"))
>>
>> ##convert the list of Matrices to array
>> ArrayDiseaseCor <- array(unlist(DiseaseCorrelation), dim =
>> c(nrow(DiseaseCorrelation[[1]]), ncol(DiseaseCorrelation[[1]]),
>> length(DiseaseCorrelation)))
>> dimnames(ArrayDiseaseCor) <- list(names(Diseases), names(Diseases),
>> colnames(Diseases[[1]]))
>>
>> ## Select only correlation bigger than 0.5 from the array
>> FilterDiseaseCor <- apply(ArrayDiseaseCor,MARGIN=c(1,2) ,function(x)
>> x[abs(x)>0.5])
>>
>> ## Final result
>> FilterDiseaseCor
>>
>> Disease1 Disease2 Disease3
>> Disease1 Numeric,5 Numeric,2 -0.9428571
>> Disease2 Numeric,2 Numeric,5 Numeric,2
>> Disease3 -0.9428571 Numeric,2 Numeric,5
>>
>>
>> Question is:
>> How can get a table as:
>>
>> D1 D2 Cor Gene
>> Disease1 Disease2 -0.94 Gene2
>> Disease1 Disease2 0.78 Gene4
>> Disease3 Disease2 0.5 Gene5
>> ...
>>
>> and
>> Disease1 Disease2 Disease3
>> Disease1 5 1 0
>> Disease2 1 5 3
>> Disease3 0 3 5
>>
>> Or in general, How can I extract data from Array to Table?
>>
>> Thanks
>> Karim
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list