Заменить часть строки (интеллектуальный анализ текста)

Я хотел бы заменить часть "Заменить" в строках от df$x до первого слова в столбце df$y. У меня есть df, как это:

x                 y
ABC-Replace-YUI   M46 Hello
CBD-Replace-TYU   MD5 Hello
DBE-Replace-RTY   M6 Hello
EBF-Replace-ERT   M79 Hello
FBG-Replace-WER   MMM8 Hello

И я хотел бы получить следующие данные:

x               y
ABC-M46-YUI     M46 Hello
CBD-MD5-TYU     MD5 Hello
DBE-M6-RTY      M6 Hello
EBF-M79-ERT     M79 Hello
FBG-MMM8-WER    MMM8 Hello

К сожалению, у меня нет опыта в интеллектуальном анализе текста, и мне нужен самый эффективный способ сделать это, поскольку у меня есть огромный набор данных с аналогичными заменами для каждой строки. Спасибо.

3 ответа

Решение

Мы можем использовать str_replace заменить "Заменить" первым словом каждой строки в столбце "у" (извлекается с word)

library(stringr)
df1$x <- str_replace(df1$x, "Replace", word(df1$y,1))
df1$x
#[1] "ABC-M46-YUI"  "CBD-MD5-TYU"  "DBE-M6-RTY"   "EBF-M79-ERT"  "FBG-MMM8-WER"

данные

df1 <- structure(list(x = c("ABC-Replace-YUI", "CBD-Replace-TYU", "DBE-Replace-RTY", 
"EBF-Replace-ERT", "FBG-Replace-WER"), y = c("M46 Hello", "MD5 Hello", 
"M6 Hello", "M79 Hello", "MMM8 Hello")), .Names = c("x", "y"), 
class = "data.frame", row.names = c(NA, -5L))

Я предполагаю, что -Replace- относится к положению, а не к точным словам, поэтому некорректно заменять сам Replace, но идентифицировать -content- в этой позиции и заменять его.

 df1 <- data.frame(x = c("ABC-Replace-YUI", 
         "CBD-anything-TYU", "DBE-test-RTY", 
         "EBF-bad-ERT", "FBG-good-WER"), 
          y = c("M46 Hello", "MD5 Hello", 
                "M6 Hello", "M79 Hello", 
                "MMM8 Hello"))
                     x          y
    1  ABC-Replace-YUI  M46 Hello
    2 CBD-anything-TYU  MD5 Hello
    3     DBE-test-RTY   M6 Hello
    4      EBF-bad-ERT  M79 Hello
    5     FBG-good-WER MMM8 Hello

Таким образом, вы можете заменить содержимое между - а также - с первым словом в у.

library(stringr)
df1$x2 <- mapply(gsub,
                 "(?<=\\-).*?(?=\\-)", 
                 word(df1$y,1), df1$x, perl = T)

df1
                 x          y           x2
1  ABC-Replace-YUI  M46 Hello  ABC-M46-YUI
2 CBD-anything-TYU  MD5 Hello  CBD-MD5-TYU
3     DBE-test-RTY   M6 Hello   DBE-M6-RTY
4      EBF-bad-ERT  M79 Hello  EBF-M79-ERT
5     FBG-good-WER MMM8 Hello FBG-MMM8-WER

Ты можешь использовать stri_extract_first_words от stringi пакет, чтобы получить первое слово, а затем применить sub функция векторизованным способом, используя mapply

library(stringi)
df1$x <- mapply(sub, "Replace", stri_extract_first_words(df1$y), df1$x, 
                                                                USE.NAMES = FALSE)

df1$x
#[1] "ABC-M46-YUI"  "CBD-MD5-TYU"  "DBE-M6-RTY"   "EBF-M79-ERT"  "FBG-MMM8-WER"
Другие вопросы по тегам