When working with time series data, we often want to decompose a time series into several components. We usually want to break out the trend, seasonality, and noise. In this article, we will learn how to decompose a time series in R.

Let’s load a data set of monthly milk production. We will load it from the url below. The data consists of monthly intervals and kilograms of milk produced.

```
df <- read.csv('https://raw.githubusercontent.com/ourcodingclub/CC-time-series/master/monthly_milk.csv')
df$month = as.Date(df$month)
head(df)
```

```
## month milk_prod_per_cow_kg
## 1 1962-01-01 265.05
## 2 1962-02-01 252.45
## 3 1962-03-01 288.00
## 4 1962-04-01 295.20
## 5 1962-05-01 327.15
## 6 1962-06-01 313.65
```

Now, we convert our data to a time series object using the R `ts`

method.

```
df.ts = ts(df[, -1], frequency = 12, start=c(1962, 1, 1))
head(df.ts)
```

`## [1] 265.05 252.45 288.00 295.20 327.15 313.65`

Let’s first plot our time series to see the trend.

`plot(df.ts)`

To decompose a time series, we can use the built in `decompose`

function.

`dec <- decompose(df.ts)`

Now that we have a decomposed object, we can plot to see the separation of seasonal, trend, and residuals.

`plot(dec)`

Now that we have decomposed the model, let’s say we would like to remove details from our time series. For example, we can subtract the seasonaility as follows.

```
ts.adj <- df.ts - dec$seasonal
plot(ts.adj)
```

Similarly with the trend.

```
ts.adj <- df.ts - dec$trend
plot(ts.adj)
```