Как написать datafame специфицирует c функций в R? - PullRequest
1 голос
/ 15 апреля 2020

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

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

onbase <- function(df, H, BB, HBP, AB, SF) {

  OBP <- (H + BB + HBP)/(AB + BB + HBP + SF)

  return(OBP)
}

Это то, что я до сих пор придумал, но мне не удалось установить это под конкретный c кадр данных. Есть ли способ указать в структуре функции, что указанный c ввод поступает из рабочего фрейма данных?

Я также хотел бы записать его во фрейм данных в качестве нового столбца, но до сих пор мне удавалось только вернуть векторный OBP и записать его отдельно.

Как может Я go о решении этого?

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать dplyr и rlang:

library(rlang)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
d <- data.frame(H = sample(1:100, 10),
                BB = sample(1:100, 10),
                HBP = sample(1:100, 10),
                AB = sample(1:100, 10),
                SF = sample(1:100, 10))

onbase <- function(df, H, BB, HBP, AB, SF) {
  H <- enquo(H)
  BB <- enquo(BB)
  HBP <- enquo(HBP)
  AB <- enquo(AB)
  SF <- enquo(SF)
  out <- mutate(df, OBP := (!!H + !!BB + !!HBP)/(!!AB + !!BB + !!HBP + !!SF))
  return(out)
}

onbase(d, H, BB, HBP, AB, SF)
#>     H BB HBP AB  SF       OBP
#> 1  41 32  82 50  42 0.7524272
#> 2  71 75  66 92  16 0.8514056
#> 3  70 60  41 98  77 0.6195652
#> 4  45 90  29 16  59 0.8453608
#> 5  93 74  98 85  41 0.8892617
#> 6   1 10  89 38  52 0.5291005
#> 7   5 47  30 90  56 0.3677130
#> 8  15  7  55 17  32 0.6936937
#> 9  58 77  45 42 100 0.6818182
#> 10 64  9  85 78  27 0.7939698

Создано в 2020-04-15 пакетом Представлять (v0.3.0)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...