add a list name into the list content in a new output

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

add a list name into the list content in a new output

szhan
Dear All,
I'd like to add a list name into the list contents to make a new output. The list is a list of data.frame derived from summary command in Rqtl. I want to add this list name to the data frame with a given column name such as "trait" and output this entire list as a table tab delimited as below.
Here is the list generated by summary command in Rqtl:
> summary(out.all, threshold=3, format="tabByCol")
bp:
         chr  pos ci.low ci.high  lod
c7.loc45   7 47.7  36.71    56.7 6.11
c15.loc8  15 12.0   3.96    22.8 5.29

hr:
          chr  pos ci.low ci.high  lod
c2.loc54    2 59.8   14.8    87.8 4.19
D15MIT184  15 22.8   12.0    36.0 3.15

bw:
          chr pos ci.low ci.high  lod
c15.loc16  15  20     11      30 6.75

heart_wt:
          chr  pos ci.low ci.high  lod
c12.loc49  12 51.2   28.2    62.2 3.65


The new output I want:

trait locus  chr  pos ci.low ci.high  lod
bp c7.loc45   7 47.7  36.71    56.7 6.11
bp c15.loc8  15 12.0   3.96    22.8 5.29

trait locus  chr  pos ci.low ci.high  lod
hr c2.loc54    2 59.8   14.8    87.8 4.19
hr D15MIT184  15 22.8   12.0    36.0 3.15

trait locus chr pos ci.low ci.high  lod
bw c15.loc16  15  20     11      30 6.75

heart_wt locus chr  pos ci.low ci.high  lod
trait c12.loc49  12 51.2   28.2    62.2 3.65

I appreciate for your help for any suggestions!!
Joshua

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: add a list name into the list content in a new output

gnustats
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: add a list name into the list content in a new output

gnustats
In reply to this post by szhan
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: add a list name into the list content in a new output

Jim Lemon-4
Hi Joshua,
Chel Hee Lee is correct, you can use rbind. Here is a slight
modification of the script I sent before.

reshape_Rqtl<-function(x) {
 newx<-list()
 for(dfi in 1:length(x)) {
  lenxdfi<-length(x[[dfi]])
  x[[dfi]]$trait<-names(x)[dfi]
  x[[dfi]]$locus<-rownames(x[[dfi]])
  rownames(x[[dfi]])<-NULL
  newx<-rbind(newx,x[[dfi]][c(lenxdfi+1,lenxdfi+2,1:lenxdfi)])
 }
 return(newx)
}

reshape_Rqtl(out.all)

and here is a variation using lapply as in Chel Hee Lee's version (a
bit neater than mine)

reshape_Rqtl<-function(x) {
 trait<-rep(names(x),unlist(lapply(x,function(y) dim(y)[1])))
 locus<-unlist(lapply(out.all,rownames))
 newx<-cbind(trait,locus,x)
 rownames(newx)<-NULL
 newx<-do.call(newx,rbind)
 return(newx)
}

display_Rqtl_out(out.all)

Jim


On Wed, Jan 21, 2015 at 2:48 AM, Chel Hee Lee <[hidden email]> wrote:

> Hi Joshua,
>
> You may use 'do.call()'.  Please see the output in below:
>
>> result <- lapply(names(op), function(x){
> +   col1 <- x
> +   col2 <- row.names(op[[x]])
> +   mat <- op[[x]]
> +   row.names(mat) <- NULL
> +   rval <- cbind(col1, col2, mat)
> +   names(rval) <- c("trait", "locus", names(mat))
> +   rval
> + })
>> result
> [[1]]
>   trait    locus chr  pos ci.low ci.high  lod
> 1    bp c7.loc45   7 47.7  36.71    56.7 6.11
> 2    bp c15.loc8  15 12.0   3.96    22.8 5.29
>
> [[2]]
>   trait     locus chr  pos ci.low ci.high  lod
> 1    hr  c2.loc54   2 59.8   14.8    87.8 4.19
> 2    hr D15MIT184  15 22.8   12.0    36.0 3.15
>
> [[3]]
>   trait     locus chr pos ci.low ci.high  lod
> 1    bw c15.loc16  15  20     11      30 6.75
>
> [[4]]
>      trait     locus chr  pos ci.low ci.high  lod
> 1 heart_wt c12.loc49  12 51.2   28.2    62.2 3.65
>
>> do.call(rbind, result)
>      trait     locus chr  pos ci.low ci.high  lod
> 1       bp  c7.loc45   7 47.7  36.71    56.7 6.11
> 2       bp  c15.loc8  15 12.0   3.96    22.8 5.29
> 3       hr  c2.loc54   2 59.8  14.80    87.8 4.19
> 4       hr D15MIT184  15 22.8  12.00    36.0 3.15
> 5       bw c15.loc16  15 20.0  11.00    30.0 6.75
> 6 heart_wt c12.loc49  12 51.2  28.20    62.2 3.65
>>
>
> Is this what you are looking for?  I hope this helps.
>
> Chel Hee Lee
>
> On 1/20/2015 9:23 AM, Shuhua Zhan wrote:
>>
>> Hi Chel,
>> Thank you very much for your help!
>> I'm sorry I did not post my wanted output correctly. I only want the
>> colnames of the data frame occur once as a table:
>> trait locus  chr  pos ci.low ci.high  lod
>>   bp c7.loc45   7 47.7  36.71    56.7 6.11
>>   bp c15.loc8  15 12.0   3.96    22.8 5.29
>>   hr c2.loc54    2 59.8   14.8    87.8 4.19
>>   hr D15MIT184  15 22.8   12.0    36.0 3.15
>>   bw c15.loc16  15  20     11      30 6.75
>>   heart_wt c12.loc49  12 51.2   28.2    62.2 3.65
>> How to add command to your script to scape those colnames?
>> Thanks again,
>> Joshua
>>
>> ----- Original Message -----
>> From: "Chel Hee Lee" <[hidden email]>
>> To: "Shuhua Zhan" <[hidden email]>, "r-help" <[hidden email]>
>> Sent: Monday, January 19, 2015 10:44:23 PM
>> Subject: Re: [R] add a list name into the list content in a new output
>>
>> I am just using the first two components of your output.
>>
>>   > op
>> $bp
>>            chr  pos ci.low ci.high  lod
>> c7.loc45   7 47.7  36.71    56.7 6.11
>> c15.loc8  15 12.0   3.96    22.8 5.29
>>
>> $hr
>>             chr  pos ci.low ci.high  lod
>> c2.loc54    2 59.8   14.8    87.8 4.19
>> D15MIT184  15 22.8   12.0    36.0 3.15
>>
>>   >
>>   > result <- lapply(names(op), function(x){
>> +   col1 <- x
>> +   col2 <- row.names(op[[x]])
>> +   mat <- op[[x]]
>> +   row.names(mat) <- NULL
>> +   rval <- cbind(col1, col2, mat)
>> +   names(rval) <- c("trait", "locus", names(mat))
>> +   rval
>> + })
>>   >
>>   > result
>> [[1]]
>>     trait    locus chr  pos ci.low ci.high  lod
>> 1    bp c7.loc45   7 47.7  36.71    56.7 6.11
>> 2    bp c15.loc8  15 12.0   3.96    22.8 5.29
>>
>> [[2]]
>>     trait     locus chr  pos ci.low ci.high  lod
>> 1    hr  c2.loc54   2 59.8   14.8    87.8 4.19
>> 2    hr D15MIT184  15 22.8   12.0    36.0 3.15
>>
>>   >
>>
>> Is this what you are looking for?  I hope this helps.
>>
>> Chel Hee Lee
>>
>>
>>
>> On 01/19/2015 02:14 PM, Shuhua Zhan wrote:
>>>
>>> Dear All,
>>> I'd like to add a list name into the list contents to make a new output.
>>> The list is a list of data.frame derived from summary command in Rqtl. I
>>> want to add this list name to the data frame with a given column name such
>>> as "trait" and output this entire list as a table tab delimited as below.
>>> Here is the list generated by summary command in Rqtl:
>>>>
>>>> summary(out.all, threshold=3, format="tabByCol")
>>>
>>> bp:
>>>            chr  pos ci.low ci.high  lod
>>> c7.loc45   7 47.7  36.71    56.7 6.11
>>> c15.loc8  15 12.0   3.96    22.8 5.29
>>>
>>> hr:
>>>             chr  pos ci.low ci.high  lod
>>> c2.loc54    2 59.8   14.8    87.8 4.19
>>> D15MIT184  15 22.8   12.0    36.0 3.15
>>>
>>> bw:
>>>             chr pos ci.low ci.high  lod
>>> c15.loc16  15  20     11      30 6.75
>>>
>>> heart_wt:
>>>             chr  pos ci.low ci.high  lod
>>> c12.loc49  12 51.2   28.2    62.2 3.65
>>>
>>>
>>> The new output I want:
>>>
>>> trait locus  chr  pos ci.low ci.high  lod
>>> bp c7.loc45   7 47.7  36.71    56.7 6.11
>>> bp c15.loc8  15 12.0   3.96    22.8 5.29
>>>
>>> trait locus  chr  pos ci.low ci.high  lod
>>> hr c2.loc54    2 59.8   14.8    87.8 4.19
>>> hr D15MIT184  15 22.8   12.0    36.0 3.15
>>>
>>> trait locus chr pos ci.low ci.high  lod
>>> bw c15.loc16  15  20     11      30 6.75
>>>
>>> heart_wt locus chr  pos ci.low ci.high  lod
>>> trait c12.loc49  12 51.2   28.2    62.2 3.65
>>>
>>> I appreciate for your help for any suggestions!!
>>> Joshua
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>>
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.