Использование dplyr :: lag для очистки фрейма данных и заполнения переменных - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь очистить свои данные так, чтобы каждая строка, находящаяся непосредственно под строкой, содержащей «gamecentre-playbyplay-event», была помечена как цель, а каждая строка, содержащая «gamecentre-playbyplay-event», находилась непосредственно под «целью».«строка помечена как основная помощь», а каждая строка, которая содержит «gamecentre-playbyplay-event» непосредственно под строкой «основная помощь», помечена как дополнительная помощь.

Вот как выглядят данные:

mydata

# A tibble: 15 x 1
   value                                                                                 
   <chr>                                                                                 
 1 "<div class=\"gamecentre-playbyplay-event team-border--lhjmq-bat gamecentre-playby"   
 2 "<a href=\"/players/14695\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
 3 "<a href=\"/players/16639\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
 4 "<a href=\"/players/17027\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
 5 "<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby"   
 6 "<a href=\"/players/17453\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
 7 "<a href=\"/players/14639\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
 8 "<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby"   
 9 "<a href=\"/players/18061\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
10 "<a href=\"/players/14752\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
11 "<a href=\"/players/17522\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
12 "<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby"   
13 "<a href=\"/players/14752\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
14 "<a href=\"/players/14639\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
15 "<a href=\"/players/14757\" class=\"gamecentre__link gamecentre__link--goal\" data-re"

Здесь есть несколько проблем.

  1. Мне нужно установить условия, чтобы строки были правильно помечены.
  2. Если нет строки «Вторичная помощь»,строка помечена как NA.
  3. Если нет строки «первичной помощи», строка также помечается как NA.

Я пытаюсьиспользовать dplyr::lag() для этого, но я не хочу вводить NA s, когда нет первичных или вторичных ассистов.

Вот основа того, что у меня есть:

goals <- mydata %>%
  filter(dplyr::lag(str_detect(value, "gamecentre-playbyplay-event team-border"), 1))

goals

# A tibble: 4 x 1
  value                                                                                                                                
  <chr>                                                                                                                                
1 "<a href=\"/players/14695\" class=\"gamecentre__link gamecentre__link--goal\" data-re
2 "<a href=\"/players/17453\" class=\"gamecentre__link gamecentre__link--goal\" data-re
3 "<a href=\"/players/18061\" class=\"gamecentre__link gamecentre__link--goal\" data-re
4 "<a href=\"/players/14752\" class=\"gamecentre__link gamecentre__link--goal\" data-re

И вот что я хотел бы, чтобы мои данные выглядели над из всего этого.Я думаю, что использование dplyr::lag() это путь, но я не уверен.

# A tibble: 4 x 3
  goal                                     primary_assist                                secondary_assist                              
  <chr>                                    <chr>                                         <chr>                                         
1 "<a href=\"/players/14695\" class=\"gam~ "<a href=\"/players/16639\" class=\"gamecent~ "<a href=\"/players/17027\" class=\"gamecentr~
2 "<a href=\"/players/17453\" class=\"gam~ "<a href=\"/players/14639\" class=\"gamecent~ NA                                            
3 "<a href=\"/players/18061\" class=\"gam~ "<a href=\"/players/14752\" class=\"gamecent~ "<a href=\"/players/17522\" class=\"gamecentr~
4 "<a href=\"/players/14752\" class=\"gam~ "<a href=\"/players/14639\" class=\"gamecent~ "<a href=\"/players/14757\" class=\"gamecentr~

Есть идеи?

dput:

    mydata <- structure(list(value = c("<div class=\"gamecentre-playbyplay-event team-border--lhjmq-bat gamecentre-playby", 
"<a href=\"/players/14695\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/16639\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/17027\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby", 
"<a href=\"/players/17453\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/14639\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby", 
"<a href=\"/players/18061\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/14752\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/17522\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<div class=\"gamecentre-playbyplay-event team-border--lhjmq-mon gamecentre-playby", 
"<a href=\"/players/14752\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/14639\" class=\"gamecentre__link gamecentre__link--goal\" data-re", 
"<a href=\"/players/14757\" class=\"gamecentre__link gamecentre__link--goal\" data-re"
)), .Names = "value", class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -15L))

1 Ответ

0 голосов
/ 30 декабря 2018

Можно создать переменную группировки, а затем spread

library(tidyverse)
mydata %>%
   #create a group based on the occurrence of 'playby'
   group_by(grp = cumsum(str_detect(value, 'playby'))) %>% 
   # filter out the first row of the group that have playby
   filter(row_number() > 1) %>% 
   # create a new category column
   mutate(categ = c("goal", "primary_assist", "secondary_assist")[row_number()]) %>%
   # spread from long to wide
   spread(categ, value) %>% 
   # remove the grouping column as part of clean up
   ungroup %>% 
   select(-grp)
# A tibble: 4 x 3
#  goal                                   primary_assist                              secondary_assist                           
#  <chr>                                  <chr>                                       <chr>                                      
#1 "<a href=\"/players/14695\" class=\"g… "<a href=\"/players/16639\" class=\"gamece… "<a href=\"/players/17027\" class=\"gamece…
#2 "<a href=\"/players/17453\" class=\"g… "<a href=\"/players/14639\" class=\"gamece… <NA>                                       
#3 "<a href=\"/players/18061\" class=\"g… "<a href=\"/players/14752\" class=\"gamece… "<a href=\"/players/17522\" class=\"gamece…
#4 "<a href=\"/players/14752\" class=\"g… "<a href=\"/players/14639\" class=\"gamece… "<a href=\"/players/14757\" class=\"gamece…
...