r - 如何根据R中同一数据框中的值扩展数据框

标签 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 值并将其应用于 tibble:

f = function(x, output){
  n = as.integer(x[[3]])
  lambda = as.integer(x[[4]])
  rpois(n, lambda)
} 
apply(tibble, MARGIN = 1, FUN = f)

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

最佳答案

这是 tidyverse 的一个选项,我们根据“passengers”列uncount,按“flight”分组应用 rpois行数 (n()) 和 'arrivaltime' 的 first 元素

library(dplyr)
library(tidyr)
df1 %>%
    uncount(passengers) %>%
    group_by(flight) %>%
    mutate(arrivaltime = rpois(n(), first(arrivaltime)))

或者另一种选择是使用 map2 循环遍历 'passengers'、'arrivaltime' 的相应元素以应用 rpoisunnest 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

数据

df1 <- structure(list(flight = c("LX123", "UA1"), terminal = c("A", 
"B"), passengers = c(3, 2), arrivaltime = c(120, 130)), row.names = c(NA, 
-2L), class = c("tbl_df", "tbl", "data.frame"))

关于r - 如何根据R中同一数据框中的值扩展数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606030/

相关文章:

r - ggplot - facet wrap - 调整比例以显示值之间的明显差异

c++ - 为什么我不能返回数组?

c++ - 字符串按值传递

r - 通过apply函数生成多个ggplot箱线图

r - 使用 lapply 列出 R 中每一列中空变量的百分比

r - 计算列中句点或星号的数量

r - 如何将 Emacs ESS 模式与 R markdown 结合使用?

Objective-C:类似函数的宏与。方法

python - 是否可以在此代码逻辑上使用应用函数或向量化?

r - 如果 "a"和 "b"在 R 中的前 4 个小数位相同,则认为它们相等