Как создать новый столбец на фрейме данных в результате обращения к rgeom - PullRequest
0 голосов
/ 03 января 2019

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

Так что я использовал rbinom, чтобы получить вектор из более чем 10000 итераций того, сколько раз происходит событие.Затем я подумал, что если превратить это в фрейм данных, я смогу использовать dplyr mutate для передачи каждой отдельной строки в функцию rgeom в качестве аргумента n.Однако я получаю одинаковый результат для каждой строки

год <- rbinom (10000, 8760, 0,0068) </p>

среднее (год)

год2 <- as.data.frame(год) </p>

имена столбцов (год2) [1] <- "test" </p>

year3 <- year2%>% mutate (year = sum (rgeom (test, 0.004)))

year3

Я ожидаю, что каждая строка будет иметь различную сумму, например,

Тестовый год

65 500

45 411

как если бы вы звонили rgeom за пределами mutate

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Проблема в том, что функция сводки, такая как sum() с mutate(), эффективно суммирует по группам в данных.Так как вы не применили какую-либо группировку, она суммируется по всему фрейму данных.

В любом случае, у меня есть два решения для вас.Во-первых, используя функцию map_int из пакета purrr, которая итеративно применяет функцию к каждому элементу указанного вами столбца, в данном случае столбец «test»:

library(dplyr)
library(purrr)

set.seed(1)
year <- 
  data.frame(test = rbinom(10000, 8760, 0.0068))

set.seed(1)
year3 <-
  year %>%
  mutate(year = map_int(test, ~sum(rgeom(., 0.04))))

head(year3)
#>   test year
#> 1   61 1369
#> 2   53 1430
#> 3   74 1568
#> 4   57 1483
#> 5   62 1294
#> 6   66 1619

В качестве альтернативы,Вы можете сгруппировать фрейм данных, используя rowwise() из dplyr, но я бы предостерег от этого, так как он считается устаревшим в какой-то момент :

set.seed(1)
year <- 
  data.frame(test = rbinom(10000, 8760, 0.0068))

set.seed(1)
year3 <- 
  year %>% 
  rowwise() %>% 
  mutate(year = sum(rgeom(test, 0.04))) %>% 
  ungroup()

head(year3)
#> # A tibble: 6 x 2
#>    test  year
#>   <int> <int>
#> 1    61  1369
#> 2    53  1430
#> 3    74  1568
#> 4    57  1483
#> 5    62  1294
#> 6    66  1619
0 голосов
/ 03 января 2019

Если я правильно понимаю ваш вопрос, проблема в том, что вы устанавливаете год, равный сумме результатов rgeom.Есть 10000 разных результатов, но только одна сумма.Я считаю, что это то, что вы хотите:

year <- rbinom(10000, 8760, 0.0068)

mean(year)

year2 <- as.data.frame(year)

colnames(year2)[1] <- "test"

year3 <- year2 %>% mutate(year = rgeom(test, 0.004))

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