Один из вариантов - создать группы со значениями pmin
и pmax
, равными c1
и c2
, и принять разницу между этими двумя значениями.Это вернет NA
для групп только с одним значением, мы можем replace
этих NA
с первым значением в группе.
library(dplyr)
df %>%
group_by(group1 = pmin(c1, c2), group2 = pmax(c1, c2)) %>%
mutate(dep = N[1] - N[2],
dep = replace(dep, is.na(dep), N[1])) %>%
ungroup() %>%
select(-group1, -group2)
# c1 c2 N dep
# <chr> <chr> <int> <int>
#1 a b 30 20
#2 a c 5 0
#3 a d 10 10
#4 c a 5 0
#5 b a 10 20