如何基于R中相同数据帧中的值扩展数据帧

时间:2020-03-09 17:59:42

标签: r function apply probability tibble

我有以下要点,我想对每个具有泊松分布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)

我的问题是现在如何完成创建第二个小标题的方法。由于使用的数据集非常庞大,因此快速计算成为一个问题。

1 个答案:

答案 0 :(得分:2)

这里是tidyverse的一个选项,其中我们根据“乘客”列uncount,按“飞行”分组,将rpois应用于行数({{1} })和“到达时间”的n()元素

first

或者另一种选择是使用library(dplyr) library(tidyr) df1 %>% uncount(passengers) %>% group_by(flight) %>% mutate(arrivaltime = rpois(n(), first(arrivaltime))) 循环遍历“旅客”的相应元素,“到达时间”应用map2rpois 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