Вот решение tidyverse
. Сначала я создаю фрейм данных.
# Create data frame
df <- data.frame(id=rep(1:3,3),
yr=rep(1:3,times=1, each=3),
x1=c(1,3,7,NA,NA,NA,9,4,10),
x2=c(NA,NA,NA,3,9,6,NA,NA,NA))
Далее я загружаю необходимые библиотеки.
# Load library
library(dplyr)
library(tidyr)
Затем я иду от широкого к длинному формату, группирую по yr
и key
(т. Е. По имени переменной), удаляю те, которые имеют NA
значения (т. Е. Сохраняю те, которые all not NA
), сгруппируйте по key
, сохраните данные за максимальный год, переключитесь обратно в широкоформатный формат и сделайте так, чтобы результат печати выглядел симпатично.
df %>%
gather("key", "val", x1, x2) %>%
group_by(yr, key) %>%
filter(all(!is.na(val))) %>%
group_by(key) %>%
filter(yr == max(yr)) %>%
spread(key, val) %>%
arrange(yr)
#> # A tibble: 6 x 4
#> id yr x1 x2
#> <int> <int> <dbl> <dbl>
#> 1 1 2 NA 3
#> 2 2 2 NA 9
#> 3 3 2 NA 6
#> 4 1 3 9 NA
#> 5 2 3 4 NA
#> 6 3 3 10 NA
Создано в 2019-05-29 с помощью пакета Представить (v0.3.0)