Following the method Curtis suggested, I tried the following:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(tidyr)
squads <- tribble(
~Year, ~IPC1, ~IPC2, ~IPC3, ~IPC4, ~IPC5,
1899, "F01B 00/04", NA, NA, NA, NA,
1899, "F01B 00/04", "F02D 01/15", NA, NA, NA,
1900, "C03D 23/65", "G05E 11/16", "E23F 12/44", "B03E 02/03", NA,
1900, "G05E 11/16", "F01B 00/04", "F02D 01/15", NA, NA,
1900, "H04F 00/01", "F05R 13/01", NA, NA, NA,
1900, "H04F 00/01", "F02D 01/15", "Z03R 04/65", NA, NA,
1900, "P09V 17/01", "E23F 12/44", "F02D 01/15", "B03E 02/03", "F01B 00/05",
1901, "F01B 00/04", NA, NA, NA, NA,
1901, "H07R 09/09", "E23F 12/44", NA, NA, NA,
1901, "P03L 07/99", "F05C 04/04", "J04S 03/03", NA, NA
)
squads %>%
gather(key = "IPC",
value = "Value",
IPC1, IPC2, IPC3, IPC4, IPC5) %>%
group_by(Year) %>%
summarise(distinct_IPC_count = n_distinct(Value,
na.rm = TRUE))
#> # A tibble: 3 x 2
#> Year distinct_IPC_count
#> <dbl> <int>
#> 1 1899 2
#> 2 1900 11
#> 3 1901 6
Created on 2019-05-07 by the reprex package (v0.2.1)
Does this help?