2 votes

Fractionnement des données d'une colonne en différentes colonnes dans R

"J'ai effectué un scraping en R mais je rencontre le problème de diviser les données en différentes colonnes. Je ne parviens pas à écrire le code pour la colonne 8:10 (dernière ligne du code). Ci-dessous le code"

library(xml2)
library(rvest)
library(stringr)
library(tidyr)

reddit_wbpg <- read_html("https://www.tripadvisor.in/Hotel_Review-g304551-d3583700-Reviews-or10-Lemon_Tree_Premier_Delhi_Airport-New_Delhi_National_Capital_Territory_of_Delhi.html")

title <- reddit_wbpg %>%
  html_node("title") %>%
  html_text()  

reviews <- reddit_wbpg %>%
  html_nodes("q.location-review-review-list-parts-ExpandableReview__reviewText--gOmRC") %>%
  html_text()  

user_data1 <- reddit_wbpg %>%
  html_nodes("div.social-member-event-MemberEventOnObjectBlock__event_type--3njyv") %>%
  html_text()

user_data2 <- reddit_wbpg %>%
  html_nodes("div.social-member-MemberHeaderStats__event_info--30wFs") %>%
  html_text()

review_title <- reddit_wbpg %>%
  html_nodes("div.location-review-review-list-parts-ReviewTitle__reviewTitle--2GO9Z") %>%
  html_text()

scraping_data <- data.frame(page_title= title, review_title = review_title, reviews = reviews, user_data1 = user_data1,user_data2 = user_data2)

scraping_data <- cbind(scraping_data,"a","a","a","a","a")
colnames(scraping_data)[6:10] <- c("user_name", "date", "location", "contribution" , "helpful_votes")

scraping_data[,6:7] <-   str_split_fixed(scraping_data$user_data1, " wrote a review", 2)
scraping_data[,8] <- str_extract(scraping_data$user_data2,"^.+?(?=[0-9]+ [hc])")
scraping_data[,9] <- str_extract(scraping_data$user_data2,"[0-9]+(?= contributions)")
scraping_data[,10] <- str_extract(scraping_data$user_data2,"[0-9]+(?= helpful votes)") 

Le résultat est visible dans l'image ci-jointe :

Error in Row 1

1voto

Ian Campbell Points 19700

Voici une approche avec str_extract en utilisant un lookahead positif et négatif :

scraping_data[,8] <- str_extract(scraping_data$user_data2,"^(?![0-9]+ (con|hel)).+?(?=[0-9]+ (con|hel)|$)")
scraping_data[,9] <- str_extract(scraping_data$user_data2,"[0-9]+(?= contribution)")
scraping_data[,10] <- str_extract(scraping_data$user_data2,"[0-9]+(?= helpful vote)")
scraping_data
#                               user_data1                                     user_data2 user_name date         location contribution helpful_votes
#1 mohd saqibsaqib wrote a review Mar 2020                 2 contributions2 helpful votes         a    a             <NA>            2             2
#2        hitesh k wrote a review Mar 2020                  4 contributions1 helpful vote         a    a             <NA>            4             1
#3          Basant wrote a review Mar 2020                                2 contributions         a    a             <NA>            2          <NA>
#4          RagP65 wrote a review Mar 2020 New Delhi, India9 contributions4 helpful votes         a    a New Delhi, India            9             4
#5          Mbosma wrote a review Mar 2020                                2 contributions         a    a             <NA>            2          <NA>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X