Here's a tidyverse solution.
First, create the data, as you haven't done so.
library(tidyverse)
d <- tibble(
Year=c(rep(2005, 4), rep(2006, 3), rep(2007, 2), 2008),
Amount=c(1500, 2420, 2720, 3020, 1150, 1840, 2070, 1650, 2640, 1740)
)
Now create an index within year. We will need this later.
d %>%
group_by(Year) %>%
mutate(Index=1:n())
# A tibble: 10 × 3
# Groups: Year [4]
Year Amount Index
<dbl> <dbl> <int>
1 2005 1500 1
2 2005 2420 2
3 2005 2720 3
4 2005 3020 4
5 2006 1150 1
6 2006 1840 2
7 2006 2070 3
8 2007 1650 1
9 2007 2640 2
10 2008 1740 1
Now pivot_wider
into the required format.
d %>%
group_by(Year) %>%
mutate(Index=1:n()) %>%
pivot_wider(
names_from=Index,
values_from=Amount
)
# A tibble: 4 × 5
# Groups: Year [4]
Year `1` `2` `3` `4`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 2005 1500 2420 2720 3020
2 2006 1150 1840 2070 NA
3 2007 1650 2640 NA NA
4 2008 1740 NA NA NA
Finally fix the column name and remove the grouping.
d %>%
group_by(Year) %>%
mutate(Index=1:n()) %>%
pivot_wider(
names_from=Index,
values_from=Amount
) %>%
rename(origin=Year) %>%
ungroup()
# A tibble: 4 × 5
origin `1` `2` `3` `4`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 2005 1500 2420 2720 3020
2 2006 1150 1840 2070 NA
3 2007 1650 2640 NA NA
4 2008 1740 NA NA NA