Хотя я чувствую, что удаление последнего слова должно сработать для вас, но для большей безопасности вы можете использовать это регулярное выражение, чтобы сохранить то, что вы хотите, и отказаться от того, что вы не хотите, более безопасным способом.
(.*(?:ST|AVENUE|STREET)\b).*
Здесь .*(?:ST|AVENUE|STREET)\b
захватывает ваши намеченные данные, захватывая все с начала жадным образом и останавливаясь, только когда встречает любое из этих слов ST или AVENUE или STREET (то есть последнее вхождение этих слов), и все, что следует после этого,будет отброшено то, что вы хотели.В вашем текущем случае у вас есть только одно слово, но оно может отбросить более одного слова или даже что-нибудь, что встречается после этих конкретных слов.Предполагаемые данные собираются в группе 1, поэтому просто замените их на \1
Так что вместо этого
sub("(.*)ST","\\1",df$Address,perl=T)
попробуйте это,
sub("(.*(?:ST|AVENUE|STREET)\b).*","\\1",df$Address,perl=T)
Посмотреть это демо