Создание новых столбцов из информации, содержащейся в других комбинациях строк / столбцов - PullRequest
1 голос
/ 20 февраля 2020

У меня есть фрейм данных с информацией о совпадении (Team, Opponent), а также разброс ставок этой игры в различных спортивных книгах. У меня есть один ряд для каждой из команд, поэтому для каждой игры будет по два ряда. В качестве примера см. Приведенный ниже фрейм данных:

example <- data.frame(Team = c("Tennessee","Vanderbilt"),
                       Opponent = c("Vanderbilt","Tennessee"),
                       PointsBet = c(-13, 13),
                       DraftKings = c(-12.5, 12.5))

        Team   Opponent PointsBet DraftKings
1  Tennessee Vanderbilt       -13      -12.5
2 Vanderbilt  Tennessee        13       12.5

Я пытаюсь создать столбцы «Opponent_PointsBet» и «Opponent_DraftKings». Таким образом, для каждого ряда у нас есть не только спрэд для ставок Команды, но и спрэд противника. В таком небольшом примере это легко сделать вручную, но мой фактический набор данных содержит сотни строк и около 25 других столбцов, каждый из которых я хочу скопировать.

Можно ли взять одна строка данных для указанной c «Команды», и применить эти столбцы как новые столбцы в строке данных, где эта команда идентифицируется как «Противник»? Мой вывод будет выглядеть так:

        Team   Opponent PointsBet DraftKings Opp_PointsBet Opp_DraftKings
1  Tennessee Vanderbilt       -13      -12.5            13           12.5
2 Vanderbilt  Tennessee        13       12.5           -13          -12.5

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

1 Ответ

1 голос
/ 20 февраля 2020

Мы можем создать два столбца в base R. Создайте индекс позиции, чтобы сопоставить «Team» с «Opponent» и использовать его для перестановки значений столбцов в «PointsBet» и «DraftKings» для создания новых столбцов

nm1 <- names(example)[3:4]
i1 <-  with(example,match(Team, Opponent))
example[paste0("Opp_", nm1)] <- lapply(example[nm1], function(x) x[i1])
example
#       Team   Opponent PointsBet DraftKings Opp_PointsBet Opp_DraftKings
#1  Tennessee Vanderbilt       -13      -12.5            13           12.5
#2 Vanderbilt  Tennessee        13       12.5           -13          -12.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...