如何从每一行的泊松分布中添加模拟值并将它们添加到数据框中
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.
更合适
使用 dplyr
和 tidyr
的另一个选项:
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")
我正在尝试通过为每一行包含来自泊松分布的 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.
更合适使用 dplyr
和 tidyr
的另一个选项:
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")