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_botto at 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 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.