После группировки по 'стране', 'году', filter
, если число отдельных элементов больше 1, возвращает 'versionA' или же возвращает первый элемент
library(dplyr)
df %>%
group_by(country, year) %>%
filter((n_distinct(version) > 1 & version == 'versionA')|row_number() == 1)
# A tibble: 3 x 3
# Groups: country, year [3]
# country year version
# <fct> <dbl> <fct>
#1 country1 2011 versionA
#2 country2 2011 versionA
#3 country3 2011 versionB
Или это может быть добавлено в if/else
df %>%
group_by(country, year) %>%
filter(if(n_distinct(version) > 1) version == 'versionA'
else row_number() ==1)
# A tibble: 3 x 3
# Groups: country, year [3]
# country year version
# <fct> <dbl> <fct>
#1 country1 2011 versionA
#2 country2 2011 versionA
#3 country3 2011 versionB
Или другой вариант arrange
df %>%
arrange(country, year, version != 'versionA') %>%
group_by(country, year) %>%
slice(1)
Или с summarize
df %>%
group_by(country, year) %>%
summarise(version = if(n_distinct(version) > 1) 'versionA' else first(version))
Или используя data.table
library(data.table)
setDT(df)[, .SD[if(n_distinct(version) > 1) version == 'versionA'
else 1], .(country, year)]