Не уверен, как отделить столбец данных, которые я очистил - PullRequest
0 голосов
/ 15 февраля 2019

Я скопировал данные из расписания женской баскетбольной команды Олбани с веб-сайта espn, и столбец выигрышей / проигрышей отформатирован следующим образом: W 77-70, что означает, что Олбани выиграл 77-70.Я хочу разделить это так, чтобы в одном столбце было показано, сколько очков набрал Олбани и сколько очков набрал противник.

Вот мой код, не уверен, что делать дальше:

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

w.url <- "http://www.espn.com/womens-college-basketball/team/schedule/_/id/399"
webpage <- read_html(w.url)

w_table <- html_nodes(webpage, 'table')
w <- html_table(w_table)[[1]]
head(w)

w <- w[-(1:2), ]
names(w) <- c("Date", "Opponent", "Score", "Record")
head(w)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вот как я это сделал.В основном, используйте sub для извлечения значений выигрыша или проигрыша в зависимости от того, выиграл или проиграл Олбани.Олбани выиграл или потерял победителя, указывается первым.Так что функция ifelse необходима.«\ 1» захватывает цифры в скобках.

w<-w[1:24,]
w$Albany<-ifelse(substr(w$Score,1,1)=='W',sub('W(\\d+)-\\d+','\\1',w$Score),sub('L\\d+-(\\d+)','\\1',w$Score))
w$Opponent_Team<-ifelse(substr(w$Score,1,1)=='W',sub('W\\d+-(\\d+)','\\1',w$Score),sub('L(\\d+)-\\d+','\\1',w$Score))

head(w)
      Date           Opponent  Score    Record Albany Opponent_Team
3  Fri, Nov 9 @#22 South Florida L74-37 0-1 (0-0)     37            74
4 Mon, Nov 12           @Cornell L48-34 0-2 (0-0)     34            48
5 Wed, Nov 14        vsManhattan W60-54 1-2 (0-0)     60            54
6 Sun, Nov 18           @Rutgers L65-39 1-3 (0-0)     39            65
7 Wed, Nov 21          @Monmouth L64-56 1-4 (0-0)     56            64
8 Sun, Nov 25       vsHoly Cross L56-50 1-5 (0-0)     50            56




           ````
0 голосов
/ 15 февраля 2019

Вы можете сначала обрезать те строки, которые не дают реальных результатов, используя функцию grepl, а затем использовать регулярное выражение для получения конкретной информации:

w <- w[grepl("-", w$Score),]

gsub("^([A-Z])([0-9]+)-([0-9]+).*", "\\1,\\2,\\3", w$Score) %>% 
  strsplit(., split = ",") %>%
  lapply(function(x){
    data.frame( 
      result  = x[1],
      oponent = ifelse(x[1] == "L", x[2], x[3]),
      albany  = ifelse(x[1] == "W", x[2], x[3])
    )
  }) %>%
  do.call('rbind',.) %>% 
  cbind(w,.) -> w2

head(w2)
#         Date           Opponent  Score    Record result oponent albany
#3  Fri, Nov 9 @#22 South Florida L74-37 0-1 (0-0)      L      74     37
#4 Mon, Nov 12           @Cornell L48-34 0-2 (0-0)      L      48     34
#5 Wed, Nov 14        vsManhattan W60-54 1-2 (0-0)      W      54     60
#6 Sun, Nov 18           @Rutgers L65-39 1-3 (0-0)      L      65     39
#7 Wed, Nov 21          @Monmouth L64-56 1-4 (0-0)      L      64     56
#8 Sun, Nov 25       vsHoly Cross L56-50 1-5 (0-0)      L      56     50
...