Here's another approach using stack(): > y <- data.frame(y) > E <- with(y, data.frame(year, month, day, stack(data.frame(y), select=4:12))) > colnames(E)[4:5] <- c("discharge", "station")
But there are some differences. For my E: > str(E) 'data.frame': 36 obs. of 5 variables: $ year : num 1961 1961 1961 1961 1961 ... $ month : num 1 1 1 1 1 1 1 1 1 1 ... $ day : num 1 2 3 4 1 2 3 4 1 2 ... $ discharge: num 1 2 3 4 5 6 7 8 9 10 ... $ station : Factor w/ 9 levels "A","B","C","D",..: 1 1 1 1 2 2 2 2 3 3 ... But for your E: > str(E) 'data.frame': 36 obs. of 5 variables: $ year : Factor w/ 1 level "1961": 1 1 1 1 1 1 1 1 1 1 ... $ month : num 1 1 1 1 1 1 1 1 1 2 ... $ day : int 1 2 3 4 1 2 3 4 1 2 ... $ discharge: Factor w/ 36 levels "1","10","11",..: 1 12 23 31 32 33 34 35 36 2 ... $ station : chr "A" "A" "A" "A" ... It seems strange that the discharge and year would be factors and station would be character. ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 ----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of jim holtman Sent: Wednesday, September 17, 2014 8:26 AM To: eliza botto Cc: r-help@r-project.org Subject: Re: [R] column names to row names Use the 'tidyr' package: your 'month' does not match your desired output - > x <- structure(c(1961, 1961, 1961, 1961, 1, 1, 1, 1, 1, 2, 3 + , 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 + , 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 + , 28, 29, 30, 31, 32, 33, 34, 35, 36) + , .Dim = c(4L, 12L) + , .Dimnames = list(NULL, c("year", "month", "day", "A", "B", "C" + , "D", "E", "F", "G", "H", "I")) + ) > xdf <- as.data.frame(x) > xdf year month day A B C D E F G H I 1 1961 1 1 1 5 9 13 17 21 25 29 33 2 1961 1 2 2 6 10 14 18 22 26 30 34 3 1961 1 3 3 7 11 15 19 23 27 31 35 4 1961 1 4 4 8 12 16 20 24 28 32 36 > require(tidyr) > require(dplyr) > xdf %>% gather(station, discharge, -year, -month, -day) year month day station discharge 1 1961 1 1 A 1 2 1961 1 2 A 2 3 1961 1 3 A 3 4 1961 1 4 A 4 5 1961 1 1 B 5 6 1961 1 2 B 6 7 1961 1 3 B 7 8 1961 1 4 B 8 9 1961 1 1 C 9 10 1961 1 2 C 10 11 1961 1 3 C 11 12 1961 1 4 C 12 13 1961 1 1 D 13 14 1961 1 2 D 14 15 1961 1 3 D 15 16 1961 1 4 D 16 17 1961 1 1 E 17 18 1961 1 2 E 18 19 1961 1 3 E 19 20 1961 1 4 E 20 21 1961 1 1 F 21 22 1961 1 2 F 22 23 1961 1 3 F 23 24 1961 1 4 F 24 25 1961 1 1 G 25 26 1961 1 2 G 26 27 1961 1 3 G 27 28 1961 1 4 G 28 29 1961 1 1 H 29 30 1961 1 2 H 30 31 1961 1 3 H 31 32 1961 1 4 H 32 33 1961 1 1 I 33 34 1961 1 2 I 34 35 1961 1 3 I 35 36 1961 1 4 I 36 > Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. On Wed, Sep 17, 2014 at 8:28 AM, eliza botto <eliza_bo...@hotmail.com> wrote: > Dear useRs, > I have a data frame "y" starting from 1961 to 2010 in the following manner > (where A,B,C ......, I are station names and the values uder these are > "discharge" values.) >> dput(y) > structure(c(1961, 1961, 1961, 1961, 1, 1, 1, 1, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, > 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, > 27, 28, 29, 30, 31, 32, 33, 34, 35, 36), .Dim = c(4L, 12L), .Dimnames = > list(NULL, c("year", "month", "day", "A", "B", "C", "D", "E", "F", "G", "H", > "I"))) > > I want it to be in the following manner "E" where the stations names are in a > seperate column and all discharge values are in one column. >> dput(E) > > structure(list(year = structure(c(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 = "1961", class = "factor"), month = c(1, > 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, > 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4), day = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, > 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, > 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), discharge = structure(c(1L, > 12L, 23L, 31L, 32L, 33L, 34L, 35L, 36L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, > 10L, 11L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 24L, 25L, > 26L, 27L, 28L, 29L, 30L), .Label = c("1", "10", "11", "12", "13", "14", > "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "24", "25", > "26", "27", "28", "29", "3", "30", "31", "32", "33", "34", "35", "36", > "4", "5", "6", "7", "8", "9"), class = "factor"), station = c("A", ! ! > "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C", "D", "D", "D", > "D", "E", "E", "E", "E", "F", "F", "F", "F", "G", "G", "G", "G", "H", > "H", "H", "H", "I", "I", "I", "I")), .Names = c("year", "month", "day", > "discharge", "station"), row.names = c(NA, 36L), class = "data.frame") > > I hope I followed all the instructions given to be by some fellows. > Thankyou very much in advance. > Eliza > > [[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. ______________________________________________ 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.