Вы хотите вернуть только слова в верхнем регистре? Если это так, используя регулярное выражение из ответа Виктора здесь , мы можем сделать
gsub(' ', '_', stringr::str_extract(x, '\\b[A-Z]+(?:\\s+[A-Z]+)*\\b'))
#[1] "SOLARES_DE_LA_PUNTA" "BIO_JUSTO_DARACT"
Но, как указали другие ответы, если вы хотите изменить только часть текста, которую мы можем использовать str_replace
с тем же регулярным выражением
stringr::str_replace(x, "\\b[A-Z]+(?:\\s+[A-Z]+)*\\b",
function(m) gsub(" ", "_", m))
#[1] "Solar_pv SOLARES_DE_LA_PUNTA 5.54 12/27/19"
#[2] "Biogas BIO_JUSTO_DARACT 1.07 1/14/20"
data
x <- c("Solar_pv SOLARES DE LA PUNTA 5.54 12/27/19",
"Biogas BIO JUSTO DARACT 1.07 1/14/20")