Hi Fahad,

Easier than what? You didn't tell us what you tried, nor why you were
unhappy with it. I'm only passingly familiar with tidyr, but I came up
with


library(tidyr)
library(dplyr)

read.table("scotland_rainfall.txt", skip = 7, header=TRUE, fill = TRUE) %>%
  select(-WIN, -SPR, -SUM, -AUT, -ANN) %>%
  gather(junk1, year, starts_with("Year")) %>%
  gather(month, rainfall_mm, one_of(toupper(month.abb))) %>%
  arrange(year, month) %>%
  select(-junk1) -> scotland_weather

Best,
Ista

On Thu, Dec 17, 2015 at 10:24 AM,  <fahad.us...@openreach.co.uk> wrote:
> Hi,
>
> Sorry for this direct approach but I am stuck with a stupid data that I would 
> like to reformat.
>
> The datafile is location at: fileURL <- 
> http://www.metoffice.gov.uk/pub/data/weather/uk/climate/datasets/Rainfall/ranked/Scotland.txt
>
> You can read the data by:
>
> if(!file.exists("scotland_rainfall.txt")){
>         #this will download the file in the current working directory
>         download.file(fileURL,destfile = "scotland_rainfall.txt")
>         dateDownload <- Sys.Date() #15-12-2015
>
> }
>
>> head(scotland_weather)
>     Jan Year.1   Feb Year.2   Mar Year.3   Apr Year.4   May Year.5   Jun 
> Year.6   Jul Year.7   Aug Year.8   Sep Year.9   Oct Year.10   Nov Year.11   
> Dec Year.12
> 1 293.8   1993 278.1   1990 238.5   1994 191.1   1947 191.4   2011 155.0   
> 1938 185.6   1940 216.5   1985 267.6   1950 258.1    1935 262.0    2009 300.7 
>    2013
> 2 292.2   1928 258.8   1997 233.4   1990 149.0   1910 168.7   1986 137.9   
> 2002 181.4   1988 211.9   1992 221.2   1981 254.0    1954 245.3    2015 268.5 
>    1986
> 3 275.6   2008 244.7   2002 201.3   1992 146.8   1934 155.9   1925 137.8   
> 1948 170.1   1939 202.3   2009 193.9   1982 248.8    2014 244.8    1938 267.2 
>    1929
> 4 252.3   2015 227.9   1989 200.2   1967 142.1   1949 149.5   2015 137.7   
> 1931 165.8   2010 191.4   1962 189.7   2011 247.7    1938 242.2    2006 265.4 
>    2011
> 5 246.2   1974 224.9   2014 180.2   1979 133.5   1950 137.4   2003 135.0   
> 1966 162.9   1956 190.3   2014 189.7   1927 242.3    1983 231.3    1917 264.0 
>    2006
> 6 245.0   1975 195.6   1995 180.0   1989 132.9   1932 129.7   2007 131.7   
> 2004 159.9   1985 189.1   2004 189.6   1985 240.9    2001 229.9    1981 261.0 
>    1912
>
>
>> tail(scotland_weather)
>
>      Jan Year.1  Feb Year.2  Mar Year.3  Apr Year.4  May Year.5  Jun Year.6  
> Jul Year.7  Aug Year.8  Sep Year.9  Oct Year.10  Nov Year.11  Dec Year.12
>
> 101 71.2   1987 34.4   1947 50.9   1918 44.6   1982 34.1   1978 38.8   1940 
> 49.2   2005 46.2   2003 50.7   2015 76.5    1973 57.1    1942 62.7    2010
>
> 102 57.9   1997 33.7   1917 44.4   1953 38.5   1918 32.1   1919 36.9   1932 
> 47.8   1989 46.1   1983 49.6   1959 74.6    1922 54.9    1958 59.9    1963
>
> 103 57.9   1941 31.8   1963 39.7   1924 31.7   1981 28.8   1994 33.2   1921 
> 45.8   1983 37.6   1955 48.5   1910 69.9    1972 53.9    1925 55.0    1995
>
> 104 57.6   1940 24.2   1930 38.8   1969 29.0   1938 26.1   2008 32.8   1925 
> 39.7   1919 33.0   1995 40.0   1933 62.9    1914 53.6    1983 43.4    1927
>
> 105 51.9   1929 20.0   1986 37.4   1931 19.8   1980 24.0   1980 30.9   1941 
> 33.7   1955 21.9   1976 39.2   2014 60.7    1951 42.3    1937 40.2    1933
>
> 106 38.6   1963 10.3   1932 28.7   1929 14.0   1974 22.5   1984 30.1   1988 
> 32.7   1913  5.1   1947 31.7   1972 19.4    1946 28.8    1945   NA      NA
>
> How can I format this into:
>
> Year   month     rainfall_mm
> 1993    Jan            293.8
> 1990   Feb           278.1
> ....
>
>> dput(head(scotland_weather,6))
> structure(list(Jan = c(293.8, 292.2, 275.6, 252.3, 246.2, 245
> ), Year.1 = c(1993L, 1928L, 2008L, 2015L, 1974L, 1975L), Feb = c(278.1,
> 258.8, 244.7, 227.9, 224.9, 195.6), Year.2 = c(1990L, 1997L,
> 2002L, 1989L, 2014L, 1995L), Mar = c(238.5, 233.4, 201.3, 200.2,
> 180.2, 180), Year.3 = c(1994L, 1990L, 1992L, 1967L, 1979L, 1989L
> ), Apr = c(191.1, 149, 146.8, 142.1, 133.5, 132.9), Year.4 = c(1947L,
> 1910L, 1934L, 1949L, 1950L, 1932L), May = c(191.4, 168.7, 155.9,
> 149.5, 137.4, 129.7), Year.5 = c(2011L, 1986L, 1925L, 2015L,
> 2003L, 2007L), Jun = c(155, 137.9, 137.8, 137.7, 135, 131.7),
>     Year.6 = c(1938L, 2002L, 1948L, 1931L, 1966L, 2004L), Jul = c(185.6,
>     181.4, 170.1, 165.8, 162.9, 159.9), Year.7 = c(1940L, 1988L,
>     1939L, 2010L, 1956L, 1985L), Aug = c(216.5, 211.9, 202.3,
>     191.4, 190.3, 189.1), Year.8 = c(1985L, 1992L, 2009L, 1962L,
>     2014L, 2004L), Sep = c(267.6, 221.2, 193.9, 189.7, 189.7,
>     189.6), Year.9 = c(1950L, 1981L, 1982L, 2011L, 1927L, 1985L
>     ), Oct = c(258.1, 254, 248.8, 247.7, 242.3, 240.9), Year.10 = c(1935L,
>     1954L, 2014L, 1938L, 1983L, 2001L), Nov = c(262, 245.3, 244.8,
>     242.2, 231.3, 229.9), Year.11 = c(2009L, 2015L, 1938L, 2006L,
>     1917L, 1981L), Dec = c(300.7, 268.5, 267.2, 265.4, 264, 261
>     ), Year.12 = c(2013L, 1986L, 1929L, 2011L, 2006L, 1912L),
>     X1.12 = c(743.6, 649.5, 645.4, 638.3, 608.9, 592.8), Year.13 = c(2014L,
>     1995L, 2000L, 2007L, 1990L, 2015L), X1.13 = c(409.5, 401.3,
>     393.7, 393.2, 391.7, 389.1), Year.14 = c(1986L, 2015L, 1994L,
>     1967L, 1992L, 1913L), X1.14 = c(455.6, 435.6, 427.8, 422.6,
>     397, 390.1), Year.15 = c(1985L, 1948L, 2009L, 1956L, 2004L,
>     1938L), X1.15 = c(661.2, 633.8, 615.8, 594.5, 590.6, 589.2
>     ), Year.16 = c(1981L, 1954L, 1938L, 1935L, 1982L, 2006L),
>     X1.16 = structure(c(105L, 104L, 103L, 102L, 101L, 100L), .Label = c("  
> 1091.2",
>     "  1138.2", "  1158.2", "  1166.0", "  1168.8", "  1174.1",
>     "  1189.4", "  1214.2", "  1219.3", "  1220.0", "  1222.0",
>     "  1231.5", "  1239.5", "  1250.0", "  1255.4", "  1266.1",
>     "  1269.7", "  1274.2", "  1276.0", "  1281.1", "  1283.5",
>     "  1301.7", "  1305.4", "  1306.4", "  1311.0", "  1311.1",
>     "  1314.3", "  1315.8", "  1324.6", "  1325.3", "  1337.6",
>     "  1348.6", "  1351.5", "  1355.6", "  1356.1", "  1356.7",
>     "  1357.8", "  1366.9", "  1374.7", "  1376.5", "  1377.9",
>     "  1378.5", "  1390.2", "  1397.6", "  1406.7", "  1406.9",
>     "  1407.5", "  1407.9", "  1414.0", "  1425.3", "  1426.5",
>     "  1429.6", "  1430.8", "  1431.6", "  1436.4", "  1438.0",
>     "  1438.8", "  1445.9", "  1446.6", "  1448.6", "  1455.0",
>     "  1458.6", "  1459.0", "  1460.9", "  1461.3", "  1464.4",
>     "  1465.7", "  1466.4", "  1467.3", "  1473.9", "  1478.4",
>     "  1478.6", "  1491.3", "  1493.2", "  1503.9", "  1520.3",
>     "  1530.4", "  1532.5", "  1536.3", "  1558.0", "  1561.4",
>     "  1566.8", "  1579.2", "  1582.3", "  1585.0", "  1585.5",
>     "  1592.6", "  1607.8", "  1623.8", "  1627.8", "  1631.0",
>     "  1657.1", "  1670.7", "  1672.8", "  1683.6", "  1686.1",
>     "  1690.4", "  1692.9", "  1696.7", "  1716.5", "  1720.0",
>     "  1735.8", "  1756.8", "  1828.1", "  1886.4", "NA"), class = "factor"),
>     Year.17 = structure(c(102L, 81L, 105L, 29L, 99L, 45L), .Label = c("  
> 1910",
>     "  1911", "  1912", "  1913", "  1914", "  1915", "  1916",
>     "  1917", "  1918", "  1919", "  1920", "  1921", "  1922",
>     "  1923", "  1924", "  1925", "  1926", "  1927", "  1928",
>     "  1929", "  1930", "  1931", "  1932", "  1933", "  1934",
>     "  1935", "  1936", "  1937", "  1938", "  1939", "  1940",
>     "  1941", "  1942", "  1943", "  1944", "  1945", "  1946",
>     "  1947", "  1948", "  1949", "  1950", "  1951", "  1952",
>     "  1953", "  1954", "  1955", "  1956", "  1957", "  1958",
>     "  1959", "  1960", "  1961", "  1962", "  1963", "  1964",
>     "  1965", "  1966", "  1967", "  1968", "  1969", "  1970",
>     "  1971", "  1972", "  1973", "  1974", "  1975", "  1976",
>     "  1977", "  1978", "  1979", "  1980", "  1981", "  1982",
>     "  1983", "  1984", "  1985", "  1986", "  1987", "  1988",
>     "  1989", "  1990", "  1991", "  1992", "  1993", "  1994",
>     "  1995", "  1996", "  1997", "  1998", "  1999", "  2000",
>     "  2001", "  2002", "  2003", "  2004", "  2005", "  2006",
>     "  2007", "  2008", "  2009", "  2010", "  2011", "  2012",
>     "  2013", "  2014", "NA"), class = "factor")), .Names = c("Jan",
> "Year.1", "Feb", "Year.2", "Mar", "Year.3", "Apr", "Year.4",
> "May", "Year.5", "Jun", "Year.6", "Jul", "Year.7", "Aug", "Year.8",
> "Sep", "Year.9", "Oct", "Year.10", "Nov", "Year.11", "Dec", "Year.12",
> "X1.12", "Year.13", "X1.13", "Year.14", "X1.14", "Year.15", "X1.15",
> "Year.16", "X1.16", "Year.17"), row.names = c(NA, 6L), class = "data.frame")
>
> Is there an easier way to do it with tidyr?
>
> Regards,
>
> Fahad Usman
> Network Engineering | CIO | Openreach
> Web: www.openreach.co.uk<http://www.openreach.co.uk/>
> Openreach is delivering fibre broadband services to communities across the UK 
> as well as installing and maintaining the communications infrastructure that 
> links homes, businesses, public and voluntary sector organisations to their 
> Communications Providers' networks.
> Think before you print! Consider the environment before printing this e-mail.
>
> This email contains BT information, which may be privileged or confidential.
> It's meant only for the individual(s) or entity named above. If you're not 
> the intended
> recipient, note that disclosing, copying, distributing or using this 
> information
> is prohibited. If you've received this email in error, please let me know 
> immediately
> on the email address above. Thank you.
> We monitor our email system, and may record your emails.
> British Telecommunications plc
> Registered office: 81 Newgate Street London EC1A 7AJ
> Registered in England no: 1800000
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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 -- To UNSUBSCRIBE and more, see
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.

Reply via email to