gpt4 book ai didi

r - 跨列随机分配总和

转载 作者:行者123 更新时间:2023-12-04 10:24:36 25 4
gpt4 key购买 nike

假设我有一个长度为 n 的向量.比方说 n=3所以向量是 v=c(3,5,4) .

我有一个零矩阵 n行和 m列。比方说 m=5

mymatrix <- matrix(rep(0, 3*5), nrow=3)

我想要的是随机分布 v 的值跨列,针对每一行。所以在这个例子中,第一行总和为 3,第二行总和为 5,第三行总和为 4。这将是一种可能的随机分配:
0   1   2   0   0
3 1 0 0 1
0 2 2 0 0

行的总和为 3,5,4,即 v 的值.

我怎样才能做到这一点?我的想法是开始
sapply(v, function(i){sample(1:m, i, replace=TRUE)})

然后从那里开始,但这给了我一个列表,因为每个结果的长度不同,我不知道如何从那里开始。

编辑:意图不是负数,所以 0 9 1 1 -8总和为 3 将不是有效行。

最佳答案

使用 purrr :

library(tibble)
library(dplyr)
library(purrr)

n <- 3
m <- 5
v <- c(3,5,4)
y <- sapply(v, function(i){sample(1:m, i, replace=TRUE)})

do_it <- function(x) {
tmp <- tibble(
index = x,
cnt = 1
) %>%
group_by(index) %>%
summarise(cnt = sum(cnt))
out <- rep(0, m)
out[tmp$index] <- tmp$cnt
return(out)
}

y %>%
map(~do_it(.x)) %>%
unlist() %>%
matrix(nrow = 3, byrow = TRUE)

关于r - 跨列随机分配总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60678011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com