сохранить только последнее слово в последовательности - PullRequest
1 голос
/ 30 апреля 2020

Я хочу сохранить только последнее слово в последовательности. Кроме того, есть определенные c слова, которые я хочу сохранить и не удалять, если они появляются в последовательности, и они должны go первой последовательности.

Допустим, у меня есть два словаря слов.

myDictionary<-c("A","B","C","p")
Priority_dic<-c("p") 

здесь, Proprity_di c показывает слова, которые я хочу сохранить, если они появляются где-то в последовательности.

Я хочу удалить все слова (в myDictionary) в последовательности и оставить только последнее слово. Кроме того, если в последовательности появятся Priority_di c, поместите его в первый.

например, у меня есть последовательность

df<-read.table(text="
id  mySequece
1   AAAB
2   ABABC
3   ApBpA
4   AACBBCp
5   ppp",header=T,stringsAsFactors = F)

result

id  mySequece
1   B
2   C
3   pA
4   pC
5   p

1 Ответ

1 голос
/ 30 апреля 2020

Мы можем использовать substring с условием. После удаления элемента Priority_dic с помощью gsub получите последний символ с substring, затем используйте ifelse до paste Priority_di c с выводом подстроки

v1 <- gsub(Priority_dic, "", df$mySequece)
v2 <- substring(v1, nchar(v1))
ifelse(grepl(Priority_dic, df$mySequece), paste0(Priority_dic, v2), v2)
#[1] "B"  "C"  "pA" "pC" "p" 

Или, чтобы сделать его более общим, мы можем извлечь на основе элементов словаря

v1 <- sapply(regmatches(df$mySequece, gregexpr(paste(myDictionary, 
  collapse="|"), df$mySequece)), function(x) tail(x[!x %in% Priority_dic], 1)[1])
i1 <- grepl(paste(Priority_dic, collapse="|"), df$mySequece)
v1[is.na(v1)] <- ""
ifelse(i1, paste0(Priority_dic, v1), v1)
#[1] "B"  "C"  "pA" "pC" "p" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...