[R] Separating columns, and sorting by rows

Gabor Grothendieck ggrothendieck at gmail.com
Mon Feb 15 09:25:25 CET 2010


Try this:

Lines <- "    yyyy-mm     Rainfall(mm)
1   1977-02        17.4
2   1977-03        34.0
3   1977-04        26.2
4   1977-05        42.6
5   1977-06        58.6
6   1977-07        23.2
7   1977-08        26.8
8   1977-09        48.4
9   1977-10        47.0
10  1977-11        37.2
11  1977-12        15.0
12  1978-01         2.6
13  1978-02         6.8
14  1978-03         9.0
15  1978-04        46.6"

library(zoo)
z <- read.zoo(textConnection(Lines), FUN = as.yearmon)

sq <- seq(floor(start(z)), ceiling(end(z)) - 1/12, 1/12)
DF <- matrix(merge(z, zoo(, sq)), byrow = TRUE, nc = 12, dimnames =
list(unique(floor(sq)), month.abb))

The first statement reads the data into a zoo object z using yearmon
(year/month) time class.

yearmon objects represent Jan 1977 as 1977, Feb 1977 as 1977+1/12, Mar
1977 as 1977+2/12, ..., Dec 1977 as 1977+11/12, etc. so the floor and
ceiling operations on the start and end of the series can be used to
form a sequence from the beginning of the first year to the end of the
last.

Finally we merge z together with a zero width series (i.e. no data,
only times) and then form the result into a matrix with the
appropriate dimension names.

> DF
     Jan  Feb Mar  Apr  May  Jun  Jul  Aug  Sep Oct  Nov Dec
1977  NA 17.4  34 26.2 42.6 58.6 23.2 26.8 48.4  47 37.2  15
1978 2.6  6.8   9 46.6   NA   NA   NA   NA   NA  NA   NA  NA


On Mon, Feb 15, 2010 at 1:07 AM, RagingJim <nowa0021 at flinders.edu.au> wrote:
>
> Dear anyone who knows more about R than me (so everyone). I have been bashing
> my head on the keyboard all day trying to do something with my table.
>
> I have some data, like so:
>     yyyy-mm     Rainfall(mm)
> 1   1977-02        17.4
> 2   1977-03        34.0
> 3   1977-04        26.2
> 4   1977-05        42.6
> 5   1977-06        58.6
> 6   1977-07        23.2
> 7   1977-08        26.8
> 8   1977-09        48.4
> 9   1977-10        47.0
> 10  1977-11        37.2
> 11  1977-12        15.0
> 12  1978-01         2.6
> 13  1978-02         6.8
> 14  1978-03         9.0
> 15  1978-04        46.6
>
> The data continues on for x number of hundreds of data points. Simply put, I
> need to make that data.frame into this data.frame/table/matrix/grid/... you
> get the picture.
>
>         Jan  Feb  Mar ... etc
> Year   Rain Rain Rain
> Year   Rain Rain Rain
> Year   Rain Rain Rain
> Year   etc...
> Year
> Year
>
> How on earth do I do it? I have made little to no progress on it all day.
> Also, just like all the other problems, the year and month will change every
> time depending upon which csv file or sql query I load into the program. If
> anyone has any pointers, that would be awesome.
>
> Cheers lads.
> --
> View this message in context: http://n4.nabble.com/Separating-columns-and-sorting-by-rows-tp1555806p1555806.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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