Мы можем попробовать с gsub
gsub("\\s+(?=[A-Z]\\b)", "",
gsub("\\b([A-Z])\\w+\\s|\\s(\\w+)$", "\\1 \\2", NAMES$ID), perl = TRUE)
#[1] "GS BROGAN" "AS WILLIS" "UIS STATION"
Или используйте strsplit
с paste
sapply(strsplit(as.character(NAMES$ID), "\\s+"),
function(x) paste(paste(substr(x[-length(x)], 1, 1), collapse=""),
x[length(x)]))
#[1] "GS BROGAN" "AS WILLIS" "UIS STATION"