Select column with the longest string in R

df$winner <- apply(df,1, function(x) x[which.max(nchar(x))])

df
    V1  V2  V3 winner
1.   A AAA   B    AAA
2. BBB   B  CC    BBB
3.   C  BB CCC    CCC

In case of of ties winner will be based on first apperance:

df$WINNER <- apply(df, 1, function(row) row[which.max(nchar(row))])

You can use c_across(). What you put in there will control which columns are selected.

library(dplyr)

df %>% 
  rowwise() %>% 
  mutate(WINNER = c_across(starts_with("V"))[which.max(nchar(c_across(starts_with("V"))))])

It can be a bit more compact if you want all columns.

df %>% 
  rowwise() %>% 
  mutate(WINNER = c_across()[which.max(nchar(c_across()))])