Замена одним словом, если оригинал содержит X - PullRequest
1 голос
/ 27 мая 2020

Я пытался создать новый столбец на основе другого. Я просто хочу установить, что если столбец включает "gama media", "bay view" или "marina view", он заменяет все на "Playa". Однако с помощью следующего кода я могу заменить только одно слово. Как я мог заменить весь контент?

library(rvest)
library(plyr)
library(purrr)
library(stringr)

url2 <- "https://www.tripadvisor.com/Hotel_Review-g659633-d246401-Reviews-Melia_Salinas-Costa_Teguise_Lanzarote_Canary_Islands.html"
TripHotel<-read_html(url2)

Percepción1 <- TripHotel %>%
  html_node(".hotels-hr-about-layout-TextItem__textitem--2JToc~ .hotels-hr-about-layout-Subsection__title--2a0Ik+ .hotels-hr-about-layout-TextItem__textitem--2JToc") %>%
  html_text()
Percepción1

Percepción2 <- TripHotel %>%
  html_node(".hotels-hr-about-layout-TextItem__textitem--2JToc+ .hotels-hr-about-layout-TextItem__textitem--2JToc") %>%
  html_text()
Percepción2

Percepción <- paste(Percepción1,"/",Percepción2)
Percepción

> Percepción
[1] "Ocean View / Great View"
>

Estilo <- str_replace_all(Percepción, pattern=c("Ocean View", "Bay View", "Marina View"), replacement="Playa")
Estilo
[1] "Playa / Great View"      "Ocean View / Great View" "Ocean View / Great View"

Instead I would like (creating a new column) that the whole column of percepción changes to "Playa" in case it cointains some of the other values ("Ocean View", "Bay View", "Marina View").

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Я не совсем уверен, на какой из этих двух вы надеетесь, но вы можете выбрать, какой из них вам подходит:

Сначала преобразуйте Percepción в data.frame:

library(dplyr)
data <- as.data.frame(Percepción)
data %>% 
  mutate(Percepción = str_replace_all(Percepción,
                pattern=c("Ocean View" = "Playa",
                          "Bay View" = "Playa",
                          "Marina View" = "Playa")))
#          Percepción
#1 Playa / Great View

В противном случае, если вы хотите преобразовать все значение, а не просто заменить, вы можете использовать grepl и case_when:

data %>%
  mutate(Percepción = case_when(grepl(paste("Ocean View",
                                            "Bay View",
                                            "Marina View",
                                            sep = "|"),
                                      Percepción) ~ "Playa",
                                TRUE ~ as.character(Percepción)))
#  Percepción
#1      Playa

Вы также можете позвонить case_when сам по себе:

case_when(grepl(paste("Ocean View",
    "Bay View", "Marina View", sep = "|"),
    Percepción) ~ "Playa",
    TRUE ~ as.character(Percepción))
#[1] "Playa"
0 голосов
/ 27 мая 2020

Функция str_replace_all принимает эти отдельные аргументы: (строка, шаблон, замена).

Здесь у вас есть аргументы шаблона и замены, оба объединены в один вектор, который передается в аргумент шаблона. Их необходимо разделить:

EstiloNuevo <- str_replace_all(Estilo, pattern=c("gama media", "Bay View", "Marina View"), replacement="Playa")

(я включаю имена аргументов для ясности, но они не обязательны). Вы также можете использовать оператор или | в аргументе шаблона: "gama media|Bay View|Marina View"

Вызов args (функции) иногда может быть полезным, если функция ведет себя не так, как вы думаете, - он сообщает вам, какие аргументы принимает эта функция.

...