Заменить все слова, заканчивающиеся на n't, во фрейме данных в R - PullRequest
0 голосов
/ 09 сентября 2018

Я ищу решение, которое может заменить все слова, оканчивающиеся на n't, двумя частями, такими как "has not", чтобы "has not" или "not", чтобы "not". "

Прямо сейчас у меня есть решение ниже, но я должен буду сделать это для всех слов, поэтому хотел знать, что можно сделать в одну строку:

levels(txt$Comments)<-gsub("haven't", "have not",levels(txt$Comments))

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вот пример использования регулярного выражения grouping ()

gsub("(.*)(n\\'t)","\\1 not","haven't")
[1] "have not"
0 голосов
/ 09 сентября 2018

Вам просто нужно использовать регулярное выражение (см. help("regex")):

x <- c("has", "hasn't", "was", "wasn't")
sub("n't$", " not", x)

# [1] "has"     "has not" "was"     "was not"

Здесь мы используем специальный символ регулярного выражения $, обозначающий конец строки. Таким образом, каждый элемент, который заканчивается в "n't", будет заменен "n't" на " not". Это будет работать, если все элементы x являются одним словом. Однако, если у вас есть хотя бы несколько слов, состоящих из нескольких слов, вы должны использовать \\b, пустую строку, отмечающую край слова:

x <- c("has", "hasn't done anything", "was", "wasn't")
sub("n't\\b", " not", x)

# [1] "has"                   "has not done anything" "was"                  
# [4] "was not"  

Более того, если потенциально может быть несколько таких слов в одном элементе вашего вектора, вам нужно gsub() вместо sub():

x <- c("has", "hasn't", "was", "I wasn't available, so we couldn't meet")
sub("n't\\b", " not", x)

# [1] "has"                                     
# [2] "has not"                                 
# [3] "was"                                     
# [4] "I was not available, so we couldn't meet"

gsub("n't\\b", " not", x)

# [1] "has"                                      
# [2] "has not"                                  
# [3] "was"                                      
# [4] "I was not available, so we could not meet"

Проблема «не могу»

Как указано в комментариях, если в ваших данных может появиться слово "can't", вам сначала нужно изменить все его экземпляры на "cann't", иначе вы получите "ca not":

x <- "I am not available, so we can't meet"
gsub("n't\\b", " not", x)

# [1] "I am not available, so we ca not meet"

x <- gsub("can't", "cann't", x)
gsub("n't\\b", " not", x)

# [1] "I am not available, so we can not meet"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...