Would this do the trick for you?
# Load libraries ----------------------------------------------------------
library("tidyverse")
library("lubridate")
# Define data -------------------------------------------------------------
d <- tribble(
~COMPANY_NUMBER, ~YEAR_END_DATE, ~NUMBER_OF_YEARS, ~NUMBER_OF_SHARES, ~FIRST_LAST_SHARES,
"#0070837", "31/12/2011", 6, 68.03, 0,
"#0070837", "31/12/2012", 6, 54.05, 0,
"#0070837", "31/12/2013", 6, 24.94, 0,
"#0070837", "31/12/2014", 6, 20.58, 0,
"#0070837", "31/12/2015", 6, 16.37, 0,
"#0070837", "31/12/2016", 6, 22.68, 0,
"1000403", "31/12/2007", 4, 7.7, 0,
"1000403", "31/12/2008", 4, 6.2, 0,
"1000403", "31/12/2009", 4, 4.89, 0,
"1000403", "31/12/2010", 4, 4.55, 0,
"1000608", "31/12/2007", 3, 285.71, 0,
"1000608", "31/12/2008", 3, 454.55, 0,
"1000608", "31/12/2009", 3, 555.56, 0
) %>%
mutate(YEAR_END_DATE = dmy(YEAR_END_DATE))
# Wrangle data ------------------------------------------------------------
d %>%
group_by(COMPANY_NUMBER) %>%
summarise(n_first = NUMBER_OF_SHARES[YEAR_END_DATE == min(YEAR_END_DATE)],
n_last = NUMBER_OF_SHARES[YEAR_END_DATE == max(YEAR_END_DATE)])
Yielding:
# A tibble: 3 x 3
COMPANY_NUMBER n_first n_last
* <chr> <dbl> <dbl>
1 #0070837 68.0 22.7
2 1000403 7.7 4.55
3 1000608 286. 556.
Hope it helps 