[R] Simple Question?

Rui Barradas ruipbarradas at sapo.pt
Thu Jun 21 20:15:14 CEST 2012


Hello,

Try the following.

dd <- read.table(text="
chrom    length

1   chr1 249250621

2   chr2 243199373

[... etc ...]

22 chr19  59128983

23 chr22  51304566

24 chr21  48129895
", header=TRUE)

str(dd)
dd$chrom <- as.character(dd$chrom)
dd$chrom <- sub("chr", "", dd$chrom)

# This 'chrom' is NOT a data.frame column
chrom <- dd$chrom
chrom[chrom == "X"] <- 100 # bigger than any dd$chrom
chrom[chrom == "Y"] <- 200 # bigger than for dd$chrom == "X"
chrom <- as.integer(chrom)
ord <- order(chrom)
barplot(dd$length[ord], names.arg=dd$chrom[ord])


Note that it uses base graphics. Do you really need ggplot2? If the goal 
is to make it prettier but it wasn't working, you still don't know where 
you can go with the simpler...


Hope this helps,

Rui Barradas

Em 21-06-2012 17:33, Kevin Parrish escreveu:
> Greetings,
>
> I am new to R, but trying to put in the time to learn. I have read the R
> manual and several other introductory texts; however, there is nothing like
> actually putting it into practice. So here is my problem, and its more of a
> learning exercise for myself than anything else, but I'm stuck and getting
> extremely frustrated that I can't figure it out.
>
> I'm trying to make a fairly simple figure, but also trying to make it look
> "better" using ggplot2.
>
> I have data.frame that contains
>
>    chrom    length
>
> 1   chr1 249250621
>
> 2   chr2 243199373
>
> 3   chr3 198022430
>
> 4   chr4 191154276
>
> 5   chr5 180915260
>
> 6   chr6 171115067
>
> 7   chr7 159138663
>
> 8   chrX 155270560
>
> 9   chr8 146364022
>
> 10  chr9 141213431
>
> 11 chr10 135534747
>
> 12 chr11 135006516
>
> 13 chr12 133851895
>
> 14 chr13 115169878
>
> 15 chr14 107349540
>
> 16 chr15 102531392
>
> 17 chr16  90354753
>
> 18 chr17  81195210
>
> 19 chr18  78077248
>
> 20 chr20  63025520
>
> 21  chrY  59373566
>
> 22 chr19  59128983
>
> 23 chr22  51304566
>
> 24 chr21  48129895
>
>
> I want to drop the "chr" and order the chrom column in ascending order with
> X & Y at the end.
>
> I have tried converting the chrom into a character vector and using the
> strsplit function, but then I have to circle back and do a lot of editing
> to make it work.
>
> I could do this in excel or some other program, but again I'm really trying
> to learn R and if I had to do something 100 times working in R would be so
> much better. I did however write the above to an excel spreadsheet and did
> the simple edits I need to make a bar chart. Using bar plot I was able to
> make a nice simple figure, but it isn't necessarily as aesthetically
> pleasing as the figures made in ggplot2 or other packages. So when I made
> the same figure in ggplot2 it worked, but reordered the chrom column as 1,
> 10, 11, 12......X,Y. I figured out this is because the package orders
> things in an a-b-c type of fashion. I could resort the column as a factors
> and manually define the levels, but again I'm trying to learn R and make it
> work more efficiently for my purposes in the future.
>
>
> Could someone help me understand how I could accomplishing taking the above
> data.frame, splitting it / dropping chr, ordering it, and then graphing it?
>
>
> Thank you in advance for your help. I've tried working on this for the past
> day and a half but can't figure it out, and the learning phase is really
> costing me in terms of being productive.
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list