Мутирование нового столбца в datafame внутри List / dplyr / mutate / list / Rstudio - PullRequest
1 голос

извините, если этот вопрос уже решен, я безуспешно ищу этот вопрос.

Я очистил 10 сезонов NBA и сохранил наборы данных в списке, но главная проблема заключается в том, что я не В наборах данных нет столбца с указанием года сезона, из-за чего сложно определить, из какого сезона поступает набор данных.

Так что я с нетерпением жду, чтобы мутировать новый столбец на основе вектора сезонов и узнайте год сезона.

Вот что я пробовал:

library(tidyverse)
library(rvest)
library(xml2)

season_scrape <- c(2010:2019)
url <- paste0("https://www.basketball-reference.com/leagues/NBA_", season_scrape, "_totals.html")

scrape_function <- function(url){
  season_stats <- url %>% 
    read_html() %>% 
    html_nodes("table") %>% 
    .[[1]] %>% 
    html_table() %>%
    mutate(season_year = season_scrape)
}

season_data <- lapply(url, scrape_function)

Что бы вы порекомендовали? мутировать внутри функции scrape_function или после получения набора данных в списке.

Заранее спасибо.

1 Ответ

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

Вы можете справиться с этим несколькими способами. Один из способов - передать в функцию дополнительный параметр year и применить функцию, используя Map вместо lapply.

library(dplyr)
library(rvest)

scrape_function <- function(url, year){
   url %>% 
    read_html() %>% 
    html_nodes("table") %>% 
    .[[1]] %>% 
    html_table() %>%
    mutate(season_year = year)

}

season_data <- Map(scrape_function, url, season_scrape)

Если вам нужно связать данные в один фрейм данных, вы также можете использовать map2_df из purrr.

season_data <- purrr::map2_df(url, season_scrape, scrape_function)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...