Я пытался найти разумный ответ на это, но оказалось, что я не такой умный ;-)
Итак, вот одна попытка
Для каждого столбца сначала замените 1 именем этого столбца, а 0 - NA, используя lapply
df[] <- lapply(names(df), function(x) ifelse(df[[x]] == 1, x, NA))
df
# Brand1 Brand2
#1 Brand1 Brand2
#2 <NA> Brand2
#3 Brand1 Brand2
#4 Brand1 <NA>
#5 <NA> Brand2
Если важно изменить порядок данных, сдвинув NA
s в конце строки, мы можем сделать это, используя apply
as.data.frame(t(apply(df,1,function(x) c(x[!is.na(x)],x[is.na(x)]))))
# V1 V2
#1 Brand1 Brand2
#2 Brand2 <NA>
#3 Brand1 Brand2
#4 Brand1 <NA>
#5 Brand2 <NA>