我正在尝试按组多次生成随机数。
例如,
> 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
。
如果您让我知道如何解决此问题,我将不胜感激。
我对您的预期输出不是很清楚,但以下示例从num
中抽取了1:num
元素并将其存储在list
列sample
中。
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