A slight modification to Rui's answer would give you a list containing separate matrices for each station:
> aggwide <- reshape(agg, direction = "wide", idvar = c("st", "month"), + timevar = "year", v.names = "population") > aggsplit <- split(aggwide[,colnames(aggwide)!="st"], aggwide$st) > aggsplit $Sa month population.1955 population.1956 population.1957 population.1958 1 1 2.400000 NA NA NA 2 2 2.400000 NA NA NA 3 3 2.266667 NA NA NA 4 4 NA 2.4 NA NA 5 5 NA 2.4 NA NA 6 6 NA 2.4 NA NA 7 7 NA NA 2.400000 NA 8 8 NA NA 2.400000 NA 9 9 NA NA 2.266667 NA 10 10 NA NA 2.400000 2.4 12 11 NA NA NA 2.4 13 12 NA NA NA 2.4 population.1966 population.1967 population.1968 population.1969 1 NA NA NA NA 2 NA NA NA NA 3 NA NA NA NA 4 NA NA NA NA 5 NA NA NA NA 6 NA NA NA NA 7 NA NA NA NA 8 NA NA NA NA 9 NA NA NA NA 10 NA NA NA NA 12 NA NA NA NA 13 NA NA NA NA $Ta month population.1955 population.1956 population.1957 population.1958 14 1 NA NA NA NA 15 2 NA NA NA NA 16 3 NA NA NA NA population.1966 population.1967 population.1968 population.1969 14 2.400000 2.4 2.400000 2.4 15 2.400000 2.4 2.400000 2.4 16 2.266667 2.4 2.266667 2.4 ---------------------------------------------- David L Carlson Associate Professor of Anthropology Texas A&M University College Station, TX 77843-4352 > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > project.org] On Behalf Of Rui Barradas > Sent: Monday, December 17, 2012 12:06 PM > To: eliza botto > Cc: r-help@r-project.org > Subject: Re: [R] mean of each month in data > > Hello, > > Something like this? > > > dat <- > structure(list(st = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, > 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, > 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, > 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L > ), .Label = c("Sa", "Ta"), class = "factor"), year = c(1966L, > 1966L, 1966L, 1966L, 1966L, 1966L, 1966L, 1966L, 1966L, 1967L, > 1967L, 1967L, 1967L, 1967L, 1967L, 1967L, 1967L, 1967L, 1968L, > 1968L, 1968L, 1968L, 1968L, 1968L, 1968L, 1968L, 1968L, 1969L, > 1969L, 1969L, 1969L, 1969L, 1969L, 1969L, 1969L, 1969L, 1955L, > 1955L, 1955L, 1955L, 1955L, 1955L, 1955L, 1955L, 1955L, 1956L, > 1956L, 1956L, 1956L, 1956L, 1956L, 1956L, 1956L, 1956L, 1957L, > 1957L, 1957L, 1957L, 1957L, 1957L, 1957L, 1957L, 1957L, 1957L, > 1958L, 1958L, 1958L, 1958L, 1958L, 1958L, 1958L, 1958L), month = c(1L, > 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, > 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, > 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, > 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 9L, 10L, > 10L, 10L, 11L, 11L, 11L, 12L, 12L, 12L), day = c(1L, 2L, 3L, > 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, > 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, > 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, > 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, > 2L, 3L, 1L, 2L, 3L), population = c(2.4, 2.4, 2.4, 2.4, 2.4, > 2.4, 2.3, 2.2, 2.3, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, > 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.3, 2.2, 2.3, 2.4, 2.4, 2.4, 2.4, > 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.3, 2.2, > 2.3, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, > 2.4, 2.4, 2.4, 2.3, 2.2, 2.3, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, > 2.4, 2.4)), .Names = c("st", "year", "month", "day", "population" > ), class = "data.frame", row.names = c(NA, -72L)) > > > agg <- aggregate(population ~ st + year + month, data = dat, FUN = > mean) > reshape(agg, direction = "wide", > idvar = c("st", "month"), > timevar = "year", > v.names = "population") > > > Hope this helps, > > Rui Barradas > Em 17-12-2012 17:11, eliza botto escreveu: > > Dear R users, > > [in case the format of email is changed or you dont finf it easy to > understand, i have attached a text file of my question] > > i have the data in the following format and i want to convert it in > the > > format given at the end. > > Ta ans Sa are the names of certain cities. there are 69 cities in my > > data. > > column 1 is representing station name (i am writing the data of only > > two cities for simplicity but actually, as i wrote, i have 69 cities > > and the actuall table runs down very deep.) > > Column 2 represnts the year for which the data is given (Actuall data > > for each station is of different length but atleast of 24 years). > > Column 3 and 4 reprent the month and the day of the data. obviously > > each year has 12 months and each month as different number of days, > but > > to make table easily understable only 3 months and 3 days of each > month > > are considered. febrary for leap years should also be considered. > > col5 represents population of that city > > > > st. year month day population in million > > Ta 1966 1 1 2.4 > > Ta 1966 1 2 2.4 > > Ta 1966 1 3 2.4 > > Ta 1966 2 1 2.4 > > Ta 1966 2 2 2.4 > > Ta 1966 2 3 2.4 > > Ta 1966 3 1 2.3 > > Ta 1966 3 2 2.2 > > Ta 1966 3 3 2.3 > > Ta 1967 1 1 2.4 > > Ta 1967 1 2 2.4 > > Ta 1967 1 3 2.4 > > Ta 1967 2 1 2.4 > > Ta 1967 2 2 2.4 > > Ta 1967 2 3 2.4 > > Ta 1967 3 1 2.4 > > Ta 1967 3 2 2.4 > > Ta 1967 3 3 2.4 > > Ta 1968 1 1 2.4 > > Ta 1968 1 2 2.4 > > Ta 1968 1 3 2.4 > > Ta 1968 2 1 2.4 > > Ta 1968 2 2 2.4 > > Ta 1968 2 3 2.4 > > Ta 1968 3 1 2.3 > > Ta 1968 3 2 2.2 > > Ta 1968 3 3 2.3 > > Ta 1969 1 1 2.4 > > Ta 1969 1 2 2.4 > > Ta 1969 1 3 2.4 > > Ta 1969 2 1 2.4 > > Ta 1969 2 2 2.4 > > Ta 1969 2 3 2.4 > > Ta 1969 3 1 2.4 > > Ta 1969 3 2 2.4 > > Ta 1969 3 3 2.4 > > Sa 1955 1 1 2.4 > > Sa 1955 1 2 2.4 > > Sa 1955 1 3 2.4 > > Sa 1955 2 1 2.4 > > Sa 1955 2 2 2.4 > > Sa 1955 2 3 2.4 > > Sa 1955 3 1 2.3 > > Sa 1955 3 2 2.2 > > Sa 1955 3 3 2.3 > > Sa 1956 4 1 2.4 > > Sa 1956 4 2 2.4 > > Sa 1956 4 3 2.4 > > Sa 1956 5 1 2.4 > > Sa 1956 5 2 2.4 > > Sa 1956 5 3 2.4 > > Sa 1956 6 1 2.4 > > Sa 1956 6 2 2.4 > > Sa 1956 6 3 2.4 > > Sa 1957 7 1 2.4 > > Sa 1957 7 2 2.4 > > Sa 1957 7 3 2.4 > > Sa 1957 8 1 2.4 > > Sa 1957 8 2 2.4 > > Sa 1957 8 3 2.4 > > Sa 1957 9 1 2.3 > > Sa 1957 9 2 2.2 > > Sa 1957 9 3 2.3 > > Sa 1957 10 1 2.4 > > Sa 1958 10 2 2.4 > > Sa 1958 10 3 2.4 > > Sa 1958 11 1 2.4 > > Sa 1958 11 2 2.4 > > Sa 1958 11 3 2.4 > > Sa 1958 12 1 2.4 > > Sa 1958 12 2 2.4 > > Sa 1958 12 3 2.4 > > ... > > ... > > uptill 69th station > > > > i want to convert the data in following format > >> Ta ## matrix for station Ta > > 1966 1967 1968 1969 > > AVERAGE OF MONTH 1 AVERAGE OF MONTH 1 AVERAGE OF MONTH 1 AVERAGE OF > MONTH 1 > > AVERAGE OF MONTH 2 AVERAGE OF MONTH 2 AVERAGE OF MONTH 2 AVERAGE OF > MONTH 2 > > AVERAGE OF MONTH 3 AVERAGE OF MONTH 3 AVERAGE OF MONTH 3 AVERAGE OF > MONTH 3 > > ........ > > ........ > > AVERAGE OF MONTH 12 AVERAGE OF MONTH 12 AVERAGE OF MONTH 12 AVERAGE > OF MONTH 12 > > similar operation are to be done for "Sa" and the remaining 67 > > stations... > > which means i want to have 69 matrices, in which each column (number > of > > columns should be equal to number of years of data) should contain > 12 > > mean monthly values of population of each year. > > > > thanks in advance > > > > eliza > > > > > > ______________________________________________ > > R-help@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. > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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. ______________________________________________ R-help@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.