удалите «The» в начале символьной переменной и переместите его в конец - PullRequest
0 голосов
/ 13 октября 2018

У меня есть некоторые данные, которые выглядят так (код для ввода данных в конце):

Year    Movie
2012    The Avengers
2015    Furious 7    
2017    The Fate of the Furious

И мой желаемый вывод:

Year    Movie
2012    Avengers, The
2015    Furious 7
2017    Fate of the Furious, The

Должен ли я использовать stringr и regex форматы?Можно ли порекомендовать ссылку, которая объясняет regex немного проще, чем большинство сайтов или справочную документацию?

Это довольно плохо, но это было все, что я мог сделать на данный момент:

str_replace(df$Movie, pattern = "The", replacement = "")

Даже некоторые советы о том, какие команды нужно искать в справочной документации, или где найти объяснения того, что мне нужно искать, были бы полезны.

df <- data.frame(stringsAsFactors=FALSE,
        Year = c(2012L, 2015L, 2017L),
       Movie = c("The Avengers", "Furious 7", "The Fate of the Furious")
)

df

str_replace(df$Movie, pattern = "The", replacement = "")

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Не красиво, но это должно работать

#Get the index of the movie starting with "The"
inds <- grepl("^The", df$Movie)

#Remove "The" from the beginning of the sentence and paste it at the end.
df$Movie[inds] <- paste(sub("^The", "", df$Movie[inds]), "The")
df

#  Year                    Movie
#1 2012             Avengers The
#2 2015                Furious 7
#3 2017  Fate of the Furious The
0 голосов
/ 13 октября 2018

Попробуйте

sub("^([Tt]he?) (.*)", "\\2, \\1", df$Movie)
#[1] "Avengers, The"           
#[2] "Furious 7"               
#[3] "Fate of the Furious, The"
  • ? - указывает, что «The» является необязательным и будет совпадать не более одного раза.Также будет соответствовать, если строки начинаются с "the".Благодаря @rawr!

  • . - соответствует любому символу - ноль или более раз, что * указывает

  • () - захватить текст, соответствующий регулярному выражению внутри них, в пронумерованную группу, которую можно повторно использовать с пронумерованной обратной ссылкой, то есть \\1 и \\2.См. регулярные-выражения.инфо .

Я надеюсь, что это имеет смысл для вас.

...