Во-первых, давайте посмотрим на ваши данные:
txt <- 'country X2005 X2006 X2007 X2008 X2009 X2010
France NA NA NA 23 NA NA
Italy NA NA 12 NA NA NA
Spain 12 NA 14 NA NA NA
Belgium NA NA 12 NA 18 NA'
df <- read.table(text = txt, header = T)
country X2005 X2006 X2007 X2008 X2009 X2010
1 France NA NA NA 23 NA NA
2 Italy NA NA 12 NA NA NA
3 Spain 12 NA 14 NA NA NA
4 Belgium NA NA 12 NA 18 NA
Эти данные "широкие", с которыми может быть сложно работать.Сначала нам нужно подготовить данные.Мы изменим его, чтобы упростить работу, удалили пропущенные значения и вычислили, насколько близко каждое наблюдение к 2008 году:
library(tidyverse)
df <- df %>%
gather(year, value, -country) %>%
mutate(year = as.numeric(gsub('X', '', year))) %>%
mutate(dist.from.2008 = abs(year - 2008)) %>%
filter(!is.na(value))
country year value dist.from.2008
1 Spain 2005 12 3
2 Italy 2007 12 1
3 Spain 2007 14 1
4 Belgium 2007 12 1
5 France 2008 23 0
6 Belgium 2009 18 1
Наконец, для каждой страны мы сохраняем один годзначение которого ближе всего к 2008 году:
df <- df %>%
group_by(country) %>%
filter(dist.from.2008 == min(dist.from.2008)) %>%
filter(row_number() == min(row_number()))
country year value dist.from.2008
<fct> <dbl> <int> <dbl>
1 Italy 2007 12 1
2 Spain 2007 14 1
3 Belgium 2007 12 1
4 France 2008 23 0