Извлекать буквы из строки в разных позициях в R - PullRequest
0 голосов
/ 10 октября 2018

У меня есть два столбца, и я хотел бы извлечь буквы из разных позиций.Цель состоит в том, чтобы показать, какая буква использовалась в Col2 для замены буквы в Col1.Буквы будут извлечены из столбцов Col1 и Col2 на основе столбца Position.В столбце «Позиция» буква «E» указывает местоположение, которое будет использоваться для извлечения букв.

enter image description here

Вот то, что я пытался использовать substr функция:

df <- data.frame ("Col1" = c("Stores","University","Street","Street Store"), 
       "Col2" = c("Ostues", "Unasersity", "Straeq","Straeq Stuwq"), 
       "Position" = c("EMMEMM","MMEEMMMMMM", "MMMEME","MMMEMEMMMEEE"), 
       "Desired Output" = c("S|O , r|u","i|a , v|s","e|a , t|q", "e|a , t|q , o|u , r|w , e|q"))


n <- which(strsplit(df$Position,"")[[1]]=="E")
#output for the first row:
# [1] 1  4

#then I used substr function:
substr(df$Col1, n, n)

#only the first character returned as below:
[1] "S"

#desired output for first row:
S|O , r|u

Ответы [ 2 ]

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

Возможно что-то вроде:

df %>% mutate(x=str_replace_all(chartr("M",".",Position),"E","\\(\\.\\)"),
          output=paste0(str_replace(Col1,x,"\\1"),"|",str_replace(Col2,x,"\\1"),
                  " , ",str_replace(Col1,x,"\\2"),"|",str_replace(Col2,x,"\\2")))
#        Col1       Col2   Position Desired.Output              x    output
#1     Stores     Ostues     EMMEMM      S|O , r|u     (.)..(.).. S|O , r|u
#2 University Unasersity MMEEMMMMMM      i|a , v|s ..(.)(.)...... i|a , v|s
#3     Street     Straeq     MMMEME      e|a , t|q     ...(.).(.) e|a , t|q

Данные:

    df <- data.frame ("Col1" = c("Stores","University","Street"), 
       "Col2" = c("Ostues", "Unasersity", "Straeq"), 
       "Position" = c("EMMEMM","MMEEMMMMMM", "MMMEME"), 
       "Desired Output" = c("S|O , r|u","i|a , v|s","e|a , t|q"))
0 голосов
/ 10 октября 2018

Сначала я просто сделаю вспомогательную функцию для извлечения символа из позиции

subchr <- function(x, pos) {
  substring(x, pos, pos)
}

Затем вы можете найти все позиции, которые вы хотите извлечь

extract_at <- lapply(strsplit(as.character(df$Position), ""), 
    function(x) which(x=="E"))

И поставитьте вместе, чтобы получить желаемый результат

mapply(function(e, a, b){
  paste(subchr(a, e), subchr(b,e), sep="|", collapse=" , ")
}, extract_at, as.character(df$Col1), as.character(df$Col2))
# [1] "S|O , r|u" "i|a , v|s" "e|a , t|q"
...