Мы можем использовать max.col
с ties.method = "last"
, чтобы получить номер столбца последнего ненулевого значения.
df$NTF <- max.col(df[-1] != 0, ties.method = "last")
df
# CARDID BSTN BSTN2 BSTN3 BSTN4 BSTN5 NTF
#1 5786 150 0 0 0 0 1
#2 9737 150 0 0 0 0 1
#3 45924 150 151 154 0 0 3
#4 66405 150 0 0 0 0 1
#5 91720 150 0 0 4233 0 4
#6 96172 150 0 0 0 3000 5
Если у вас есть другие столбцы до и / или после "BSTN"
столбцов, мы можем использовать grep
, чтобы выбрать только те столбцы, которые нам интересны.
cols <- grep('^BSTN', names(df))
df$NTF <- max.col(df[cols] != 0, ties.method = "last")
Мы также можем использовать apply
построчно:
apply(df[-1], 1, function(x) max(which(x != 0)))
#[1] 1 1 3 1 4 5
данные
df <- structure(list(CARDID = c(5786L, 9737L, 45924L, 66405L, 91720L,
96172L), BSTN = c(150L, 150L, 150L, 150L, 150L, 150L), BSTN2 = c(0L,
0L, 151L, 0L, 0L, 0L), BSTN3 = c(0L, 0L, 154L, 0L, 0L, 0L), BSTN4 = c(0L,
0L, 0L, 0L, 4233L, 0L), BSTN5 = c(0L, 0L, 0L, 0L, 0L, 3000L)),
class = "data.frame", row.names = c(NA, -6L))