Хобрук: Ваш путь к мастерству в программировании

Удалить слова, используя PURRR из кадра данных в R

Я видел примеры использования gsub и sapply для удаления слов из фрейма данных.

Есть ли решение с использованием map из библиотеки purrr

library(purrr)
ID<-c(1,2)
Text_W<-c("I love vegetables, and some fruits","Can we meet tomorrow for a movies, and other fun activities") 
new_tab<-tibble(ID,Text_W)
remove_words<-c("love", "and")

Я пробовал это без успеха:

#gsub from base
map_chr(new_tab$Text_W,~paste(gsub(remove_words,"")))


library(stringr)
#
map(new_tab$Text_W,~paste(str_replace_all(remove_words,"")))

Любая помощь будет оценена.

10.04.2018

Ответы:


1

Не обязательно использовать map. Просто попробуйте

new_tab %>% 
  mutate(Text_New=str_replace_all(Text_W, paste(remove_words,collapse = "|"),""))
# A tibble: 2 x 3
     ID Text_W                                                      Text_New                                                
  <dbl> <chr>                                                       <chr>                                                   
1    1. I love vegetables, and some fruits                          I  vegetables,  some fruits                             
2    2. Can we meet tomorrow for a movies, and other fun activities Can we meet tomorrow for a movies,  other fun activities

Обратите внимание, что я свернул remove_words с аргументом or == |, используя paste(remove_words,collapse = "|").

10.04.2018
  • Спасибо за вашу неоценимую помощь. Быстрый вопрос: если я изменю remove_words‹-c(любовь и), чтобы включить om remove_words‹-c(любовь, и, om). Должен ли я по-прежнему использовать str_replace_all, не беря часть из первого элемента? 10.04.2018

  • 2

    В основном вы пропускаете . для ссылки на аргумент функции:

    > map_chr(new_tab$Text_W, ~gsub("love|and", "", .))
    [1] "I  vegetables,  some fruits"                             
    [2] "Can we meet tomorrow for a movies,  other fun activities"
    

    Также обратите внимание на gsub("love|and" вместо gsub(c("love","and").

    Редактировать

    Если вы хотите использовать вектор удаляемых слов, вместо ввода love|and введите

    map_chr(new_tab$Text_W, ~gsub(paste(remove_words, collapse="|"), "", .))
    
    10.04.2018
  • Зачем использовать пасту? Есть ли необходимость 10.04.2018
  • @StéphaneLaurent - как заставить remove_words любить|и программно в R. В моем реальном примере я использую tm::stopwords(english). Как мне получить этот список в формате x|y|z|.. Спасибо 10.04.2018
  • @Beginner Не уверен, что понял. Может быть, paste(remove_words,collapse = "|"), как в ответе @Jimbou. 10.04.2018
  • @StéphaneLaurent отлично - спасибо. Одним из слов в tm::stopwords(english) является или. Если remove_words был обновлен для включения или ... remove_words‹-c(любовь, и, или). Использование str_replace_all и gsub, похоже, также удаляет или с завтрашнего дня. Какую функцию я могу использовать, чтобы этого не произошло. Спасибо 10.04.2018
  • @ Новичок, я понимаю, что ты имеешь в виду. Можно просто добавить пробелы: `remove_words‹-c(любовь, и, или)`. 10.04.2018
  • @Новичку вот так: paste0(" ", tm::stopwords("english"), " ") 10.04.2018

  • 3

    Я бы сделал это одним из этих способов, не использовал бы purrr для этого

    library(purrr)
    library(dplyr)
    library(stringr)
    
    ID<-c(1,2)
    Text_W<-c("I love vegetables, and some fruits","Can we meet tomorrow for a movies, and other fun activities") 
    new_tab<-tibble(ID,Text_W)
    remove_words<-c("love", "and")
    
    # This is basic, if you are only doing it for one column, see Jimbou's note on collapse
    new_tab %>% 
      mutate(Text_W = str_replace_all(Text_W, paste(remove_words,collapse = "|"),""))
    
    # This is more scalable, as you can put other columns in the `vars()` method
    new_tab %>% 
      mutate_at(vars(Text_W), str_replace_all, paste(remove_words, collapse = "|"), "")
    
    # This is is scalable, but uses base R in case I didn't feel like having to load stringr
    new_tab %>% 
      mutate_at(vars(Text_W), sub, 
                pattern = paste(remove_words, collapse = "|"), 
                replacement = "")
    
    11.04.2018
    Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

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