如何从每一行的泊松分布中添加模拟值并将它们添加到数据框中

How to add simulated values from a poisson distribution for each row and add them into the dataframe

我正在尝试通过为每一行包含来自泊松分布的 500 个模拟值来扩展数据框,其参数 Theta (count_mean) 已存储在数据框中。在下面的示例中,我仅提供了一个数据框示例,因为我的真实数据由 50,000 多行(即 id)组成。

example.data <- data.frame(id=c("4008", "4118", "5330"), 
                       count_mean=c(2, 25, 11)
                       )

所以对于每一行,我知道我必须通过以下方式生成模拟值:

rpois(500, example.data$count_mean)

如何将这些值引入同一个数据框中,其中每个新列为每一行呈现一个模拟值?

您可以使用sapply模拟数字,然后使用cbind将您的数据绑定在一起:

simdata <- t(sapply(example.data$count_mean, function(x) rpois(500, x)))

colnames(simdata) <- paste0("sim_", 1:500)

cbind(example.data, simdata)

但是,我鼓励您使用不同的数据格式:在这种情况下,长 table 可能比当前的宽 table.

更合适

使用 dplyrtidyr 的另一个选项:

example.data %>% 
  rowwise() %>%
  mutate(poisson = list(rpois(500, count_mean))) %>%
  unnest(poisson) %>%
  group_by(id) %>%
  mutate(count=row_number()) %>%
  pivot_wider(names_from="count", names_prefix="sim_", values_from="poisson")