【发布时间】:2020-10-12 19:23:31
【问题描述】:
给定一个数据框,每个人都有三个不同的观察结果,我试图为每个唯一的人分配一个唯一的随机整数。
df <- data.frame(sample = 1:15, ID = rep(1:5, times = 3))
sample ID
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 1
7 7 2
8 8 3
9 9 4
10 10 5
11 11 1
12 12 2
13 13 3
14 14 4
15 15 5
在这种情况下,我希望每个 ID 都有一个介于 1 和 5 之间的随机值“newvar”。
我试过了
df %>% group_by(ID) %>% mutate(newvar = sample(5, n(), replace = FALSE))
它不会在每个 ID 中保持新变量相同,并且
df %>% group_by(ID) %>% mutate(newvar = sample.int(n()))
在每组中给出一个介于 1 和 3 之间的随机数,并且
df %>% group_by(ID) %>% mutate(newvar = sample(5, replace = FALSE))
这不起作用,因为它希望 newvar 的大小为 1 或 3,而不是 5。
我也尝试过使用 ID 的级别:
levels(df$ID)这随机化了 ID 列并将其写入测试 df 上的 newvar
sample ID newvar 1 1 5 5 2 2 2 2 3 3 1 1 4 4 4 4 5 5 3 3 6 6 5 5 7 7 2 2 8 8 1 1 9 9 4 4 10 10 3 3 11 11 5 5 12 12 2 2 13 13 1 1 14 14 4 4 15 15 3 3在我的完整数据集(306 个人的 918 次观察)上,它会引发错误:
Error: Assigned data `value` must be compatible with existing data. x Existing data has 918 rows. x Assigned data has 306 rows. ℹ Only vectors of size 1 are recycled.有没有办法让 sample() 在 group_by 命令中发生,或者让每个级别的 ID 正确分配给一个随机整数?
【问题讨论】: