Как сопоставить несколько строк в одном столбце с несколькими строками в другом столбце удалить совпадения в R? - PullRequest
1 голос
/ 24 марта 2020

Вот мой код:

A <- c("ruler measure", "measure rulers", "rulers")
B <- c("you can measure things with rulers", "you can measure things with rulers", "you can measure things with rulers")
df <- data.frame(as.character(A), as.character(B))

df_new <- df %>%
  mutate(
    new_B = str_replace_all(B, A, "")
  )

Я хочу, чтобы столбцы выглядели так:

A                          B   
ruler measure             you can things with
measure rulers            you can things with
rulers                    you can measures things with  

Но str_replace_all (), кажется, заменяет только одно совпадение A и B (например, линейка), но не другое совпадение (например, мера)

Спасибо за помощь !!

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вот базовое решение R

df <- within(df,
             new_B <- mapply(gsub, 
                             sapply(strsplit(as.character(A),"\\s+"),
                                    function(v) paste0(paste0("\\s+?",v,".*?\\b"),collapse = "|")),
                             "",
                             B))

такое, что

> df
               A                                   B                       new_B
1  ruler measure  you can measure things with rulers         you can things with
2 measure rulers you can measures things with rulers         you can things with
3         rulers  you can measure things with rulers you can measure things with
1 голос
/ 24 марта 2020

Мы можем заменить пространство на |

library(dplyr)
library(stringr)
df %>% 
   mutate(new_B = str_replace_all(B, str_replace(A, " ", "|"), ''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...