Мы subset
набор данных на основе 1996, 1998 в столбцах "год", select
в столбцах "год", "b" и unstack
для получения ожидаемого результата
unstack(subset(df, year %in% c(1996, 1998), select = c('year', 'b')), b ~ year)
# X1996 X1998
#1 0.9767918 0.74416429
#2 0.5529621 0.02063662
#@3 0.3305543 0.59292207
Или, используя tidyverse
, мы select
представляем интересующие столбцы, filter
строки на основе столбца 'year', создаем столбец последовательности в формате 'year', spread
в формате 'wide' и select
из ненужных столбцов
library(tidyverse)
df %>%
select(year, b) %>%
filter(year %in% c(1996, 1998)) %>%
group_by(year = factor(year, levels = unique(year), labels = c('V1', 'V2'))) %>%
mutate(n = row_number()) %>%
spread(year, b) %>%
select(-n)
# A tibble: 3 x 2
# V1 V2
# <dbl> <dbl>
#1 0.977 0.744
#2 0.553 0.0206
#3 0.331 0.593
Поскольку существует только два года, мы также можем использовать summarise
df %>%
summarise(V1 = list(b[year == 1996]), V2 = list(b[year == 1998])) %>%
unnest