Не знаю, хотите ли вы этого:
library(dplyr)
#just recreating your data with minor corrections
year_1 <- c(1914, 1915, 1916, 1917)
a_1 <- c("blue", "green", "green", "blue")
df_1 <- data.frame(a_1, year_1, stringsAsFactors = FALSE)
df_1 <- df_1 %>% group_by(a_1, year_1) %>% tally() %>%
ungroup(a_1, year_1) %>%
mutate(freq_1=n/sum(n))
year_2 <- c(1912, 1913, 1914, 1915, 1916, 1917, 1918)
a_2 <- c("black", "pink", "blue", "green", "green", "pink", "blue")
df_2 <- data.frame(a_2, year_2, stringsAsFactors = FALSE)
df_2 <- df_2 %>% group_by(a_2, year_2) %>% tally() %>%
ungroup(a_2, year_2) %>%
mutate(freq_2=n/sum(n))
df_1 %>% left_join(df_2, by = c("year_1" = "year_2", "a_1" = "a_2")) %>%
mutate(count = ifelse(!is.na(n.y), n.x + n.y, n.x),
freq = count/sum(count)) %>% select(-n.y, -n.x, - freq_1, -freq_2 )
# A tibble: 4 x 4
a_1 year_1 count freq
<chr> <dbl> <int> <dbl>
1 blue 1914 2 0.286
2 blue 1917 1 0.143
3 green 1915 2 0.286
4 green 1916 2 0.286
Это добавляет все категории от df_2
до df_1
, которые существуют в одном и том же году в обоих фреймах данных, складывает их соответствующиечастоты от обоих фреймов данных и вычисляет новый процент, аналогичный вашим freq_1
и freq_2
-колонкам.