Вот подход через ifelse
:
Иллюстративные данные:
set.seed(123)
df <- data.frame(
year = sample(1986:2016, 20))
Решение:
df$period <- ifelse(df$year >= 1986 & df$year <= 1990, "period1",
ifelse(df$year >= 1991 & df$year <= 1995, "period2",
ifelse(df$year >= 1996 & df$year <= 2000, "period3",
ifelse(df$year >= 2001 & df$year <= 2005, "period4",
ifelse(df$year >= 2006 & df$year <= 2010, "period5", "period6")))))
Результат:
df
year period
1 1994 period2
2 2009 period5
3 1997 period3
4 2010 period5
5 2011 period6
6 1987 period1
7 1999 period3
8 2007 period5
9 1998 period3
10 1996 period3
11 2006 period5
12 1995 period2
13 2008 period5
14 2015 period6
15 2012 period6
16 2000 period3
17 1989 period1
18 1986 period1
19 1990 period1
20 2014 period6
РЕДАКТИРОВАТЬ :
Другое решение - через dplyr
:
Сначала определите вектор с вашими пределами периода:
limits <- c(1986, 1990, 1995, 2000, 2005, 2010, 2016)
Затем сгруппируйте year
значения по этим limits
:
df1 <- df %>%
group_by(group = findInterval(year, limits))
Результат:
df1
# A tibble: 20 x 3
# Groups: group [6]
year period group
<int> <list> <int>
1 1994 <lgl [1]> 2
2 2009 <lgl [1]> 5
3 1997 <lgl [1]> 3
4 2010 <lgl [1]> 6
5 2011 <lgl [1]> 6
6 1987 <lgl [1]> 1
7 1999 <lgl [1]> 3
8 2007 <lgl [1]> 5
9 1998 <lgl [1]> 3
10 1996 <lgl [1]> 3
11 2006 <lgl [1]> 5
12 1995 <lgl [1]> 3
13 2008 <lgl [1]> 5
14 2015 <lgl [1]> 6
15 2012 <lgl [1]> 6
16 2000 <lgl [1]> 4
17 1989 <lgl [1]> 1
18 1986 <lgl [1]> 1
19 1990 <lgl [1]> 2
20 2014 <lgl [1]> 6