我有以下要点,我想对每个具有泊松分布rpois(n, lambda)
的乘客的到达时间进行采样。
# A tibble: 3 x 4
flight terminal passengers arrivaltime
<chr> <chr> <dbl> <dbl>
1 LX123 A 3 120
2 UA1 B 2 130
最后一个小标题应该看起来像这样,每一行代表一个乘客,到达时间是泊松分布中的一个样本,lambda是第一个小标题中航班的到达时间。
# A tibble: 3 x 4
flight terminal arrivaltime
<chr> <chr> <dbl>
1 LX123 A 125
2 LX123 A 115
3 LX123 A 118
4 UA1 B 129
5 UA1 B 132
我已经有以下代码来计算rpois值并将其应用于小波:
f = function(x, output){
n = as.integer(x[[3]])
lambda = as.integer(x[[4]])
rpois(n, lambda)
}
apply(tibble, MARGIN = 1, FUN = f)
我的问题是现在如何完成创建第二个小标题的方法。由于使用的数据集非常庞大,因此快速计算成为一个问题。
答案 0 :(得分:2)
这里是tidyverse
的一个选项,其中我们根据“乘客”列uncount
,按“飞行”分组,将rpois
应用于行数({{1} })和“到达时间”的n()
元素
first
或者另一种选择是使用library(dplyr)
library(tidyr)
df1 %>%
uncount(passengers) %>%
group_by(flight) %>%
mutate(arrivaltime = rpois(n(), first(arrivaltime)))
循环遍历“旅客”的相应元素,“到达时间”应用map2
和rpois
unnest
列进行扩展数据集行
list
library(purrr)
df1 %>%
mutate(arrivaltime = map2(passengers, arrivaltime, rpois)) %>%
unnest(c(arrivaltime))
# A tibble: 5 x 4
# flight terminal passengers arrivaltime
# <chr> <chr> <dbl> <int>
#1 LX123 A 3 127
#2 LX123 A 3 110
#3 LX123 A 3 131
#4 UA1 B 2 109
#5 UA1 B 2 133