Мы можем использовать max.col
в base R
temp$newcol <- names(temp)[max.col(temp, 'first')]
Если у нас есть несколько единиц в одной строке и все имена столбцов как одна строка
i1 <- which(temp2 ==1, arr.ind = TRUE)
temp2$newcol <- NA_character_
temp2$newcol[unique(i1[,1])] <- tapply(names(temp2)[i1[,2]],
i1[,1], FUN = toString)
temp2$newcol
#[1] "col1" "col1, col2" "col3"
Это также обеспечит назначение только тем строкам, в которых есть 1
data
temp <- data.frame(col1 = c(1, 0, 0), col2 = c(0, 1, 0), col3 = c(0, 0, 1))
temp2 <- data.frame(col1 = c(1, 1, 0), col2 = c(0, 1, 0), col3 = c(0, 0, 1))