按组多次生成随机序号

问题描述 投票:0回答:1

我正在尝试按组多次生成随机数。

例如,

> set.seed(1002)
> df<-data.frame(ID=LETTERS[seq(1:5)],num=sample(c(2,3,4), size=5, replace=TRUE))
> df
  ID num
1  A   3
2  B   4
3  C   3
4  D   2
5  E   3

ID中,我想生成连续的随机数,而不用(例如)替换4次。

如果ID为A,它将在1:3中随机选择4次数字。因此,这将是

sample(c(1,2,3,1,2,3,1,2,3),replace=FALSE)

我尝试了几件事,例如

df%>%group_by(ID)%>%mutate(random=sample(rep(1:num,times=4),replace=FALSE))

失败。 warning显示为In 1:num

我也尝试过这个。

ddply(df,.(ID),function(x) sample(rep(1:num,times=4),replace=FALSE))

错误再次出现,并带有NA/NaN

如果您让我知道如何解决此问题,我将不胜感激。

r sample
1个回答
0
投票

我对您的预期输出不是很清楚,但以下示例从num中抽取了1:num元素并将其存储在listsample中。

library(tidyverse)
df %>%
    mutate(sample = map(num, ~sample(1:.x, replace = T)))
#  ID num     sample
#1  A   2       1, 1
#2  B   4 1, 3, 1, 2
#3  C   2       1, 2
#4  D   4 3, 2, 1, 3
#5  E   2       2, 2    
© www.soinside.com 2019 - 2024. All rights reserved.