WedX - журнал о программировании и компьютерных науках

R - столбец беговых баллов для спортивных результатов

У меня есть большой набор данных о забитых головах в футбольных матчах, отсортированных по матчу и последовательности забитых мячей. Это в следующем формате. В настоящее время у меня есть только первые 2 столбца, третий - это то, что я изо всех сил пытаюсь создать:

Goal.Sequence     Goal.Difference     Running.Difference
0                 0                   0
1                 1                   1
2                -1                   0
25                0                   0
0                 0                   0
1                 1                   1
2                 1                   2
3                -1                   1
4                 1                   2
25                0                   2
0                 0                   0
1                -1                  -1
2                -1                  -2
25                0                  -2

Каждая строка представляет собой забитый гол, за исключением любой строки с порядковым номером 0 или 25 (это фиктивные строки для начальной точки матча и конечной точки матча). Столбец Goal.Difference представляет собой гол с точки зрения хозяев поля (+1, если они забили, -1, если они пропустили). Таким образом, образец моих данных выше представляет 3 разных матча, результаты которых были 1-1, 3-1 и 0-2.

Я хочу создать третий столбец для разницы в текущем счете в матче, но который перезапускается при каждом новом матче. Я изо всех сил пытаюсь сделать это, и любая помощь будет оценена по достоинству.

Следуют некоторые примерные данные:

# Provide data in a usable format (e.g. using dput on your data object)
scores <- structure(list(Goal.Sequence = c(0L, 1L, 2L, 25L, 0L, 1L, 2L, 
                                           3L, 4L, 25L, 0L, 1L, 2L, 25L),
                         Goal.Difference = c(0L, 1L, -1L, 0L, 0L, 1L, 1L,
                                             -1L, 1L, 0L, 0L, -1L, -1L, 0L)),
                    .Names = c("Goal.Sequence", "Goal.Difference", "match"),
                    row.names = c(NA, -14L), class = "data.frame")
28.04.2014

Ответы:


1

Если вы создаете метку, которая указывает, какое совпадение является частью строки:

labl <- cumsum(df$Goal.Sequence==25)

затем вы можете выполнить спермо на основе совпадений с помощью

ave(df$Goal.Difference, labl, FUN=cumsum)
28.04.2014
  • Спасибо, но когда я запускаю это, я получаю следующее сообщение: Ошибка в unique.default (x, nmax = nmax): unique () применяется только к векторам. Любые идеи, что я здесь делаю неправильно, пожалуйста? 28.04.2014
  • Извините, забыл назвать третий аргумент для ave - исправили сейчас 28.04.2014
  • Кроме того, вы только что заметили в ваших данных, что вы сейчас указали, что мы, вероятно, должны определить метки, изменив ==25 на ==0, если вы хотите сбрасывать оценки на каждом 0, а не на каждом 25. 28.04.2014
  • Мне нравится, как использование ave упрощает расчет. Тем не менее, вам следует подумать о том, чтобы исправить структуру ваших данных, чтобы иметь один столбец на переменную, и избегать использования фиктивных строк. Таким образом будет лучше работать большинство статистических функций и построения графиков. 28.04.2014

  • 2

    Лучше сохранить каждую переменную в отдельном столбце. Учитывая это, есть много способов сделать то, что вам нужно. Например:

    # Keep track of each match in its own variable. Use filter from package stats
    scores$match <- as.integer(stats::filter(x=scores$Goal.Sequence==0,
                     filter=1, method='recursive'))
    
    # Drop the dummy rows
    scores <- scores[!scores$Goal.Sequence %in% c(0,25),]
    
    # Run a cumsum on the Goal.Difference by match
    library(package=dplyr)  # Very useful for data manipulation
    
    scores <- scores %.%
     group_by(match) %.%
     mutate(Running.Difference=cumsum(Goal.Difference)) %.%
     select(match, Goal.Sequence, Goal.Difference, Running.Difference)
    
    28.04.2014
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]