Home > Blockchain >  How do I convert quarterly time series to a table format without year and quarterly labels?
How do I convert quarterly time series to a table format without year and quarterly labels?

Time:06-06

My aim is to transform my quarterly time series data to a table format without having labels to the years and quarters on the columns. I also don't want serial numbers.

I have the dput of the data here:

dput(rainfall)
structure(c(26.3333333333333, 129.5, 250.8, 59.5666666666667, 
29.0333333333333, 157.8, 138.1, 68.6, 55.3, 196.2, 118.033333333333, 
120.733333333333, 31.0333333333333, 166.5, 48.2666666666667, 
91.4333333333333, 24.3333333333333, 113.933333333333, 98.3666666666667, 
69, 50.2, 171.2, 142.7, 88.4, 26.7, 172.433333333333, 251.733333333333, 
58.1666666666667, 26.1, 125.433333333333, 273.5, 91.7, 22.5666666666667, 
158, 156.466666666667, 48.5333333333333, 46.3333333333333, 126.4, 
92.9, 37.1333333333333, 2.36666666666667, 184.233333333333, 94.6666666666667, 
50.9333333333333, 30.9333333333333, 177.566666666667, 184.266666666667, 
60.7333333333333, 39.3333333333333, 150.566666666667, 299.7, 
68.0666666666667, 49.0666666666667, 168.533333333333, 133.5, 
59.9, 53.4666666666667, 141.6, 281.4, 75.3333333333333, 41.9666666666667, 
200.8, 176.233333333333, 94.5666666666667, 30.2333333333333, 
139.333333333333, 207.4, 45.8, 6.93333333333333, 146, 163.166666666667, 
67.2, 20.0333333333333, 201.133333333333, 201.8, 48.1666666666667, 
18.9666666666667, 138.6, 169.733333333333, 64.1666666666667, 
79.5, 131.866666666667, 159.6, 70.4, 21.2, 78.4333333333333, 
163.833333333333, 96, 48.5, 177, 196.333333333333, 62.1333333333333, 
37.6333333333333, 119.366666666667, 243.666666666667, 49.4333333333333, 
35.3666666666667, 161.1, 121.166666666667, 111, 3.6, 98.3333333333333, 
88.7333333333333, 74.1, 63.8666666666667, 187.7, 183.566666666667, 
115.866666666667, 36.2333333333333, 126.066666666667, 240.833333333333, 
35.4333333333333, 27.0666666666667, 192.2, 186.366666666667, 
17.4833333333333, 15.5166666666667, 166.633333333333, 238.65, 
77.6833333333333, 38.2833333333333, 125.983333333333, 188.916666666667, 
94.1666666666667, 20.8666666666667, 174.916666666667, 110.8, 
66.6, 42.6333333333333, 206.25, 161.5, 56.5333333333333, 22.6666666666667, 
106.116666666667, 173.166666666667, 44.3666666666667, 5.31666666666667, 
193.406666666667, 177.266666666667, 71.2833333333333, 33.2833333333333, 
168.6, 221.366666666667, 41.2666666666667, 22.8, 180.866666666667, 
118.7, 49.4833333333333, 39.95, 170.533333333333, 260.783333333333, 
170.833333333333, 68.9666666666667, 157.833333333333, 250.733333333333, 
90.1166666666667, 46.6833333333333, 149.356666666667, 175.65, 
68.3, 54.6833333333333, 166.65, 131.183333333333, 80.6833333333333
), .Dim = c(164L, 1L), .Dimnames = list(NULL, "rainfall"), .Tsp = c(1973, 
2013.75, 4), class = "ts")

This is the code I used:

library(zoo)

new_data <- data.frame(yq = yearqtr(index(rainfall)), val = rainfall)

Here is the output:

         yq   rainfall

1   1973 Q1  26.333333

2   1973 Q2 129.500000

3   1973 Q3 250.800000

4   1973 Q4  59.566667

5   1974 Q1  29.033333

6   1974 Q2 157.800000

7   1974 Q3 138.100000

8   1974 Q4  68.600000

9   1975 Q1  55.300000

10  1975 Q2 196.200000

I don't want the serial numbers and label on the quarter column.

Looking forward to hearing from anyone who may assist.

CodePudding user response:

It is difficult to tell what you want without the question showing what it is but maybe you want this which gives a zoo object which displays as shown:

as.zoo(rainfall)
##           rainfall
## 1973 Q1  26.333333
## 1973 Q2 129.500000
## 1973 Q3 250.800000
## 1973 Q4  59.566667
...snip...

or in terms of new_data this gives the same output.

read.zoo(new_data, drop = FALSE)

or maybe you want one of these which give data frames with the year/quarter as row names.

as.data.frame(as.zoo(rainfall))
##           rainfall
## 1973 Q1  26.333333
## 1973 Q2 129.500000
## 1973 Q3 250.800000
## 1973 Q4  59.566667
...snip...

or this gives the same output but is in terms of new_data:

as.data.frame(read.zoo(new_data, drop = FALSE))

The description of "serial number" is unclear and the output shows what you don't want rather than what you do want so we really don't know what it is but maybe these will help:

c(cycle(rainfall))  # 1, 2, 3, etc. (the quarter number)

paste0("Q", cycle(rainfall))  # Q1, Q2, etc.

quarters(time(as.zoo(rainfall)))  # same

format(time(as.zoo(rainfall)), "Q%q")  # same

If what you meant is how to display new_data without the row names:

write.table(new_data, row.names = FALSE)

or without row names and without the year/quarter column:

write.table(new_data[, 2, drop = FALSE], row.names = FALSE)

or in terms of rainfall

write.table(rainfall, row.names = FALSE)

Note that these give a one column data frame and matrix in terms of new_data

 new_data[, 2, drop = FALSE] # data frame
 cbind(rainfall = new_data[[2]]) # 1 column matrix

or in terms of rainfall:

 as.data.frame(rainfall) # data frame
 rbind(rainfall) # 1 column matrix
  • Related