[R] How to do the same thing for all levels of a column?
Bert Gunter
gunter.berton at gene.com
Tue Jul 24 18:44:45 CEST 2012
... and I neglected to mention that f = myfiles[,2]
Sigh.... More coffee needed.
-- Bert
On Tue, Jul 24, 2012 at 9:43 AM, Bert Gunter <bgunter at gene.com> wrote:
> Sorry. Typo in my previous. Should be:
>
>> sapply(myfile[,-c(1,2)],function(x)prop.table(tapply(f,x,sum)))
> $X1
> L R T
> 0.91491320 0.03675651 0.04833030
>
> $X2
> E M
> 0.9827278 0.0172722
>
> $X3
> N Y
> 0.0483303 0.9516697
>
> $X4
> I L Q
> 0.8976410 0.0850868 0.0172722
>
> $X5
> I V
> 0.9516697 0.0483303
>
> $X6
> P S
> 0.96324349 0.03675651
>
> $X7
> D E G
> 0.8976410 0.0540287 0.0483303
>
> $X8
> A C
> 0.9827278 0.0172722
>
>
>
> On Tue, Jul 24, 2012 at 9:37 AM, Bert Gunter <bgunter at gene.com> wrote:
>> OK, I admit it: I re-read what you wrote and now I'm confused. Is:
>>
>>> sapply(myfile[,-c(1,2)],function(x)prop.table(tapply(f,x)))
>>
>> X1 X2 X3 X4 X5 X6 X7 X8
>> [1,] 0.1428571 0.2 0.2857143 0.125 0.2 0.2 0.125 0.2
>> [2,] 0.4285714 0.2 0.1428571 0.250 0.4 0.2 0.375 0.2
>> [3,] 0.1428571 0.4 0.2857143 0.375 0.2 0.2 0.250 0.4
>> [4,] 0.2857143 0.2 0.2857143 0.250 0.2 0.4 0.250 0.2
>>
>> what you want?
>>
>> -- Bert
>> On Tue, Jul 24, 2012 at 9:17 AM, Bert Gunter <bgunter at gene.com> wrote:
>>> The OP's request is a bit ambiguous to me: at a given residue, do you
>>> wish to calculate the proportions for only those amino acids that
>>> appear at that residue, or do you wish to include the proportions for
>>> all amino acids, some of which might then be 0.
>>>
>>> Assuming the former, then I don't think one needs to go to the lengths
>>> described by John below.
>>>
>>> Using your example (thanks!), the following seems to suffice:
>>>
>>>> sapply(myfile[,-c(1,2)],function(x)prop.table(table(x)))
>>>
>>> $X1
>>> x
>>> L R T
>>> 0.50 0.25 0.25
>>>
>>> $X2
>>> x
>>> E M
>>> 0.75 0.25
>>>
>>> $X3
>>> x
>>> N Y
>>> 0.25 0.75
>>>
>>> $X4
>>> x
>>> I L Q
>>> 0.25 0.50 0.25
>>>
>>> $X5
>>> x
>>> I V
>>> 0.75 0.25
>>>
>>> $X6
>>> x
>>> P S
>>> 0.75 0.25
>>>
>>> $X7
>>> x
>>> D E G
>>> 0.25 0.50 0.25
>>>
>>> $X8
>>> x
>>> A C
>>> 0.75 0.25
>>>
>>>
>>> This could, of course, then be modified to add zero proportions for
>>> all non-appearing amino acids.
>>>
>>> -- Cheers,
>>> Bert
>>>
>>> On Tue, Jul 24, 2012 at 8:18 AM, John Kane <jrkrideau at inbox.com> wrote:
>>>>
>>>> I think this does what you want using two packages, plyr and reshape2 that
>>>> you may have to install. If so install.packages("plyr", "reshape2") should
>>>> do the trick.
>>>> library(plyr)
>>>> library(reshape2)
>>>> # using supplied file 'myfile" from below
>>>> time0total = sum(myfile[,2])
>>>> mydata <- myfile[, 2:10]
>>>> md1 <- melt(mydata, id = "Time_zero")
>>>> ddply(md1, .(variable, value), summarise, sum = sum(Time_zero)/time0total)
>>>>
>>>>
>>>> John Kane
>>>> Kingston ON Canada
>>>>
>>>> -----Original Message-----
>>>> From: zj29 at cornell.edu
>>>> Sent: Tue, 24 Jul 2012 10:25:21 -0400
>>>> To: jrkrideau at inbox.com
>>>> Subject: Re: [R] How to do the same thing for all levels of a column?
>>>>
>>>> Hi John,
>>>> Thank you for the tips. My apologies about the unreadable sample data...
>>>> So here is the output of the sample data, and hopefully it works this time
>>>> :)
>>>> myfile <- structure(list(Proteins = structure(1:4, .Label = c("p1", "p2",
>>>> "p3", "p4"), class = "factor"), Time_zero = c(0.0050723, 0.0002731,
>>>> 9.76e-05, 0.0002077), X1 = structure(c(1L, 3L, 1L, 2L), .Label = c("L",
>>>> "R", "T"), class = "factor"), X2 = structure(c(1L, 1L, 2L, 1L
>>>> ), .Label = c("E", "M"), class = "factor"), X3 = structure(c(2L,
>>>> 1L, 2L, 2L), .Label = c("N", "Y"), class = "factor"), X4 = structure(c(1L,
>>>> 2L, 3L, 2L), .Label = c("I", "L", "Q"), class = "factor"), X5 =
>>>> structure(c(1L,
>>>> 2L, 1L, 1L), .Label = c("I", "V"), class = "factor"), X6 = structure(c(1L,
>>>> 1L, 1L, 2L), .Label = c("P", "S"), class = "factor"), X7 = structure(c(1L,
>>>> 3L, 2L, 2L), .Label = c("D", "E", "G"), class = "factor"), X8 =
>>>> structure(c(1L,
>>>> 1L, 2L, 1L), .Label = c("A", "C"), class = "factor")), .Names =
>>>> c("Proteins",
>>>> "Time_zero", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8"), row.names =
>>>> c(NA,
>>>> 4L), class = "data.frame")
>>>> And here is my original question:
>>>> Basically, I have a bunch of protein sequences composed of different amino
>>>> acid residues, and each residue is represented by an uppercase letter. I
>>>> want to calculate the ratio of different amino acid residues at each
>>>> position of the proteins.
>>>>
>>>> If I name this table as myfile.txt, I have the following scripts to
>>>> calculate the ratio of each amino acid residue at position 1:
>>>>
>>>> # showing levels of the 3rd column, which means the types of residues
>>>>
>>>> >myfile[,3]
>>>>
>>>>
>>>> # calculating the ratio of L
>>>>
>>>> >list=c(which(myfile[,3]=="L"))
>>>>
>>>> >time0total=sum(myfile[,2])
>>>>
>>>> >AA_L=0
>>>>
>>>> >for (i in 1:length(list)){AA_L=sum(myfile[list[[i]],2]+AA_L)}
>>>>
>>>> >ratio_L=AA_L/time0total
>>>>
>>>>
>>>> So how can I write a script to do the same thing for the other two levels (T
>>>> and R) in column 3, and also do this for every column that contains amino
>>>> acid residues?
>>>>
>>>> Thanks a lot!
>>>>
>>>> Regards,
>>>>
>>>> Zhao
>>>> 2012/7/24 John Kane <[1]jrkrideau at inbox.com>
>>>>
>>>> First thing is to supply the data in a useable format. As is it is
>>>> essenatially unreadable. All R-beginners do this. :)
>>>> Have a look at the dput function (?dput) for a good way to supply sample
>>>> data in an email.
>>>> If you have a large dataset probably a few dozen lines of data would be
>>>> fine.
>>>> Something like dput(head(mydata)) should be fine. Just copy and paste the
>>>> output into your email.
>>>> Welcome to R. I think you will like it.
>>>> John Kane
>>>> Kingston ON Canada
>>>>
>>>> > -----Original Message-----
>>>> > From: [2]zj29 at cornell.edu
>>>> > Sent: Mon, 23 Jul 2012 18:01:11 -0400
>>>> > To: [3]r-help at r-project.org
>>>> > Subject: [R] How to do the same thing for all levels of a column?
>>>> >
>>>> > Dear all,
>>>> >
>>>> >
>>>> >
>>>> > I am a R beginner, and I am looking for a way to do the same thing for
>>>> > all
>>>> > levels of a column in a table.
>>>> >
>>>> >
>>>> >
>>>> > Basically, I have a bunch of protein sequences composed of different
>>>> > amino
>>>> > acid residues, and each residue is represented by an uppercase letter. I
>>>> > want to calculate the ratio of different amino acid residues at each
>>>> > position of the proteins. Here is an example table:
>>>> >
>>>> > Proteins
>>>> >
>>>> > Time_zero
>>>> >
>>>> > 1
>>>> >
>>>> > 2
>>>> >
>>>> > 3
>>>> >
>>>> > 4
>>>> >
>>>> > 5
>>>> >
>>>> > 6
>>>> >
>>>> > 7
>>>> >
>>>> > 8
>>>> >
>>>> > p1
>>>> >
>>>> > 0.0050723
>>>> >
>>>> > L
>>>> >
>>>> > E
>>>> >
>>>> > Y
>>>> >
>>>> > I
>>>> >
>>>> > I
>>>> >
>>>> > P
>>>> >
>>>> > D
>>>> >
>>>> > A
>>>> >
>>>> > p2
>>>> >
>>>> > 0.0002731
>>>> >
>>>> > T
>>>> >
>>>> > E
>>>> >
>>>> > N
>>>> >
>>>> > L
>>>> >
>>>> > V
>>>> >
>>>> > P
>>>> >
>>>> > G
>>>> >
>>>> > A
>>>> >
>>>> > p3
>>>> >
>>>> > 9.757E-05
>>>> >
>>>> > L
>>>> >
>>>> > M
>>>> >
>>>> > Y
>>>> >
>>>> > Q
>>>> >
>>>> > I
>>>> >
>>>> > P
>>>> >
>>>> > E
>>>> >
>>>> > C
>>>> >
>>>> > p4
>>>> >
>>>> > 0.0002077
>>>> >
>>>> > R
>>>> >
>>>> > E
>>>> >
>>>> > Y
>>>> >
>>>> > L
>>>> >
>>>> > I
>>>> >
>>>> > S
>>>> >
>>>> > E
>>>> >
>>>> > A
>>>> >
>>>> >
>>>> >
>>>> > If I name this table as myfile.txt, I have the following scripts to
>>>> > calculate the ratio of each amino acid residue at position 1:
>>>> >
>>>> > # showing levels of the 3rd column, which means the types of residues
>>>> >
>>>> > >myfile[,3]
>>>> >
>>>> >
>>>> >
>>>> > # calculating the ratio of L
>>>> >
>>>> > >list=c(which(myfile[,3]=="L"))
>>>> >
>>>> > >time0total=sum(myfile[,2])
>>>> >
>>>> > >AA_L=0
>>>> >
>>>> > >for (i in 1:length(list)){AA_L=sum(myfile[list[[i]],2]+AA_L)}
>>>> >
>>>> > >ratio_L=AA_L/time0total
>>>> >
>>>> >
>>>> >
>>>> > So how can I write a script to do the same thing for the other two levels
>>>> > (T and R) in column 3, and also do this for every column that contains
>>>> > amino acid residues?
>>>> >
>>>> >
>>>> >
>>>> > Many thanks for any help you could give me on this topic! :)
>>>> >
>>>> >
>>>> >
>>>> > Regards,
>>>> >
>>>> > Zhao
>>>> > --
>>>> > Zhao JIN
>>>> > Ph.D. Candidate
>>>> > Ruth Ley Lab
>>>> > 467 Biotech
>>>> > Field of Microbiology, Cornell University
>>>> > Lab: 607.255.4954
>>>> > Cell: 412.889.3675
>>>> >
>>>>
>>>> > [[alternative HTML version deleted]]
>>>> >
>>>> > ______________________________________________
>>>> > [4]R-help at r-project.org mailing list
>>>> > [5]https://stat.ethz.ch/mailman/listinfo/r-help
>>>> > PLEASE do read the posting guide
>>>> > [6]http://www.R-project.org/posting-guide.html
>>>> > and provide commented, minimal, self-contained, reproducible code.
>>>> ____________________________________________________________
>>>> FREE 3D MARINE AQUARIUM SCREENSAVER - Watch dolphins, sharks & orcas on
>>>> your desktop!
>>>> Check it out at [7]http://www.inbox.com/marineaquarium
>>>>
>>>> --
>>>> Zhao JIN
>>>> Ph.D. Candidate
>>>> Ruth Ley Lab
>>>> 467 Biotech
>>>> Field of Microbiology, Cornell University
>>>> Lab: 607.255.4954
>>>> Cell: 412.889.3675
>>>> _________________________________________________________________
>>>>
>>>> [8]3D Earth Screensaver Preview
>>>> Free 3D Earth Screensaver
>>>> Watch the Earth right on your desktop! Check it out at
>>>> [9]www.inbox.com/earth
>>>>
>>>> References
>>>>
>>>> 1. mailto:jrkrideau at inbox.com
>>>> 2. mailto:zj29 at cornell.edu
>>>> 3. mailto:r-help at r-project.org
>>>> 4. mailto:R-help at r-project.org
>>>> 5. https://stat.ethz.ch/mailman/listinfo/r-help
>>>> 6. http://www.R-project.org/posting-guide.html
>>>> 7. http://www.inbox.com/marineaquarium
>>>> 8. http://www.inbox.com/earth
>>>> 9. http://www.inbox.com/earth
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> 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.
>>>
>>>
>>>
>>> --
>>>
>>> Bert Gunter
>>> Genentech Nonclinical Biostatistics
>>>
>>> Internal Contact Info:
>>> Phone: 467-7374
>>> Website:
>>> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>>
>>
>>
>> --
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>>
>> Internal Contact Info:
>> Phone: 467-7374
>> Website:
>> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>
>
>
> --
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
--
Bert Gunter
Genentech Nonclinical Biostatistics
Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
More information about the R-help
mailing list