Не нужно использовать циклы, мы можем использовать max.col
с ties.method = "last"
, чтобы получить индекс столбца для последней записи не-NA в каждой строке, использовать cbind
, чтобы создать пару строк-столбцов, а затем установить подкадр данных.
df$new_column <- df[cbind(1:nrow(df), max.col(!is.na(df), ties.method = "last"))]
df
# comment_0 comment_1 comment_2 comment_3 comment_4 comment_5 new_column
#1 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#2 text0 text1 text2 text3 text4 text5 text5
#3 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#4 text0 <NA> <NA> <NA> <NA> <NA> text0
#5 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#6 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#7 text0 <NA> <NA> <NA> <NA> <NA> text0
#8 text0 text1 text2 <NA> <NA> <NA> text2
#9 text0 <NA> <NA> <NA> <NA> <NA> text0
#10 text0 <NA> <NA> <NA> <NA> <NA> text0
Мы также можем использовать apply
(не рекомендуется, когда вы можете max.col
) построчно (с MARGIN = 1
) и получать последнее значение не-NA в каждой строке.
df$new_column <- apply(df, 1, function(x) x[which.max(cumsum(!is.na(x)))])