Создание цикла for из нескольких ссылок для создания одной таблицы, используя ссылки ESPN для нескольких сезонов / лет

вам нужно предоставить такое же количество? s в IN как количество значений в вашем массиве $ values ​​

, это можно сделать легко, создав массив? s как

 $in = join(',', array_fill(0, count($values), '?'));

и использовать этот массив $ в вашем разделе IN

. Это будет динамически предоставлять вам индивидуальный массив из-за вашего измененного массива $ values ​​

0
задан papelr 14 July 2018 в 01:39
поделиться

1 ответ

Рассмотрим обобщение вашего процесса в определенной функции и переход в параметр года. И для прокрутки функции перейдите в векторе лет в lapply для списка данных, которые будут конкатенированы в конце с помощью do.call(rbind, ...) или bind_rows.

get_whip_data <- function(yr_param) {

    # ASSIGN URLS
    whip_a <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/order/false")
    whip_b <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/count/41/qualified/true/order/false")
    whip_c <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/count/81/order/false")

    # BUILD DATA FRAMES
    a_data <- whip_a %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    b_data <- whip_b %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    c_data <- whip_c %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    # APPEND ALL
    yr_df <- rbind(a_data, b_data, c_data)   # OR do.call(rbind, list(a_data, b_data, c_data))
    yr_df$year <- yr_param

    return(yr_df)
}

df_list <- lapply(2005:2017, get_whip_data)

final_df <- do.call(rbind, df_list)       # REQUIRES SAME COLUMNS ACROSS YEARS
final_df <- dplyr::bind_rows(df_list)     # USE IF COLUMNS MAY DIFFER ACROSS YEARS

Если вам трудно -кодированные ссылки, передайте их с помощью Map (обертка к mapply). Это предполагает, что все параметры равны по длине, где Map повторяется по-разному.

get_whip_data <- function(yr_param, whip_a, whip_b, whip_c) {

    # BUILD DATA FRAMES
    a_data <- whip_a %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    b_data <- whip_b %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    c_data <- whip_c %>%
      read_html %>%
      html_node("#my-players-table > div > div.mod-content > table") %>%
      html_table(header = T)

    # APPEND ALL
    yr_df <- rbind(a_data, b_data, c_data)
    yr_df$year <- yr_param

    return(yr_df)
}

df_list <- Map(get_whip_data, years_vec, a_urls_vec, b_urls_vec, c_urls_vec)

final_df <- do.call(rbind, df_list)       # REQUIRES SAME COLUMNS ACROSS YEARS
final_df <- dplyr::bind_rows(df_list)     # USE IF COLUMNS MAY DIFFER ACROSS YEARS
1
ответ дан Parfait 17 August 2018 в 12:04
поделиться
  • 1
    Можете ли вы определить «жестко закодированные ссылки»? Извинения - я не новичок в R, но R - это почти единственный язык, с которым я свободно владею. Благодаря! – papelr 14 July 2018 в 01:27
  • 2
    OHHH, посредством «жестко закодированных звеньев», вы имеете в виду, если у меня есть все ссылки, восходящие к 2005 году? – papelr 14 July 2018 в 01:35
  • 3
    Да. Первое решение динамически создает URL-адреса. Второе решение читается в ранее назначенных URL-адресах. – Parfait 14 July 2018 в 05:07
  • 4
    Еще один вопрос - скажем, я хотел разделить URL еще несколько раз, например: paste0("http://www.espn.com/mlb/team/stats/", side, "/_/name/", team, "/year/", season, "/") - каждый раз, когда я пытаюсь запустить его, я просто получаю сообщение об ошибке. Я запускаю его в такой функции, как выше, за исключением выбора команды, подачи / ватинга и сезона – papelr 19 July 2018 в 00:30
  • 5
    Вам нужно передать эти другие векторы в качестве дополнительных аргументов в Map, вставляя вместе, чтобы создать URL. – Parfait 19 July 2018 в 11:31
Другие вопросы по тегам:

Похожие вопросы: