Вероятно, лучший способ - использовать left_join, вам нужно всего лишь изменить NA на 0:
df1 <- data.frame(ID=c('111111','111111', '222222', '333333', '444444'),
year=c(2010, 2011, 2010, 2011, 2011))
df2 <- data.frame(ID=c('111111', '111111', '111111', '111111', '333333'),
year=c(2010,2010,2010,2011,2011))
library(tidyverse)
df2 %>% count(ID, year) -> summ_df2
df1 %>% left_join(summ_df2)
#> Joining, by = c("ID", "year")
#> Warning: Column `ID` joining factors with different levels, coercing to
#> character vector
#> ID year n
#> 1 111111 2010 3
#> 2 111111 2011 1
#> 3 222222 2010 NA
#> 4 333333 2011 1
#> 5 444444 2011 NA
Создано в 2019-01-29 с помощью пакета Представить (v0.2.1)
Операция с одной цепью Добавлен следующий комментарий @Ronak Shah
df1 <- data.frame(ID=c('111111','111111', '222222', '333333', '444444'),
year=c(2010, 2011, 2010, 2011, 2011))
df2 <- data.frame(ID=c('111111', '111111', '111111', '111111', '333333'),
year=c(2010,2010,2010,2011,2011))
library(tidyverse)
df2 %>%
count(ID, year) %>%
right_join(df1) %>%
replace_na(list(n = 0))
#> Joining, by = c("ID", "year")
#> Warning: Column `ID` joining factors with different levels, coercing to
#> character vector
#> # A tibble: 5 x 3
#> ID year n
#> <chr> <dbl> <dbl>
#> 1 111111 2010 3
#> 2 111111 2011 1
#> 3 222222 2010 0
#> 4 333333 2011 1
#> 5 444444 2011 0
Создано в 2019-01-29 * представительный пакет (v0.2.1)