组行(ID),然后为每个组 ID 分配一个处理
group rows (ID) and then assign a treatment for each group ID
我正在处理一个长(人-周期)数据集,其数量不平衡(每个人的观察次数不同)。我想要做的是为每个人(在新列中)的每个 row/observation 随机分配一个治疗(A、B 或 C),治疗因人而异。所以每个人都会得到三种干预措施中的一种,并且干预措施对于他们的每一次观察都保持不变。
所以我想从 ID 列开始随机分配治疗。最终结果看起来像这样。
ID <- c(1,1,1,2,2,2,2,2,3,3,4,4,4,4,5,6,6,6,7,7)
Treatment <- c('a','a','a','b','b','b','b','b','c','c','a','a','a','a','b','c','c','c','a','a')
data <- data.frame(ID, Treatment)
data
我尝试了使用 ddply (How to generate a random treatment variable by factor?) 的示例,但是我希望处理变量对于分组变量是常量。
感谢您提供的任何帮助:)
您可以使用基数 R
通过 merge
:
set.seed(1)
random_trt <- data.frame(ID = unique(ID),
New_Treatment = sample(c("a", "b", "c"), size = length(unique(ID)), replace = T))
merge(data,
random_trt,
by = "ID",
all.x = T)
ID Treatment New_Treatment
1 1 a a
2 1 a a
3 1 a a
4 2 b c
5 2 b c
6 2 b c
7 2 b c
8 2 b c
9 3 c a
10 3 c a
11 4 a b
12 4 a b
13 4 a b
14 4 a b
15 5 b a
16 6 c c
17 6 c c
18 6 c c
19 7 a c
20 7 a c
您使用 sample
为每个独特的 ID
随机抽样您的处理向量。然后将其合并为一对多合并,以便它为 data
中的每个 ID
重复。
使用dplyr
:
set.seed(1)
data %>%
dplyr::group_by(ID) %>%
dplyr::mutate(New_Treatment = sample(c("a", "b", "c"), size = 1))
ID Treatment New_Treatment
<dbl> <chr> <chr>
1 1 a a
2 1 a a
3 1 a a
4 2 b c
5 2 b c
6 2 b c
7 2 b c
8 2 b c
9 3 c a
10 3 c a
11 4 a b
12 4 a b
13 4 a b
14 4 a b
15 5 b a
16 6 c c
17 6 c c
18 6 c c
19 7 a c
20 7 a c
我正在处理一个长(人-周期)数据集,其数量不平衡(每个人的观察次数不同)。我想要做的是为每个人(在新列中)的每个 row/observation 随机分配一个治疗(A、B 或 C),治疗因人而异。所以每个人都会得到三种干预措施中的一种,并且干预措施对于他们的每一次观察都保持不变。
所以我想从 ID 列开始随机分配治疗。最终结果看起来像这样。
ID <- c(1,1,1,2,2,2,2,2,3,3,4,4,4,4,5,6,6,6,7,7)
Treatment <- c('a','a','a','b','b','b','b','b','c','c','a','a','a','a','b','c','c','c','a','a')
data <- data.frame(ID, Treatment)
data
我尝试了使用 ddply (How to generate a random treatment variable by factor?) 的示例,但是我希望处理变量对于分组变量是常量。
感谢您提供的任何帮助:)
您可以使用基数 R
通过 merge
:
set.seed(1)
random_trt <- data.frame(ID = unique(ID),
New_Treatment = sample(c("a", "b", "c"), size = length(unique(ID)), replace = T))
merge(data,
random_trt,
by = "ID",
all.x = T)
ID Treatment New_Treatment
1 1 a a
2 1 a a
3 1 a a
4 2 b c
5 2 b c
6 2 b c
7 2 b c
8 2 b c
9 3 c a
10 3 c a
11 4 a b
12 4 a b
13 4 a b
14 4 a b
15 5 b a
16 6 c c
17 6 c c
18 6 c c
19 7 a c
20 7 a c
您使用 sample
为每个独特的 ID
随机抽样您的处理向量。然后将其合并为一对多合并,以便它为 data
中的每个 ID
重复。
使用dplyr
:
set.seed(1)
data %>%
dplyr::group_by(ID) %>%
dplyr::mutate(New_Treatment = sample(c("a", "b", "c"), size = 1))
ID Treatment New_Treatment
<dbl> <chr> <chr>
1 1 a a
2 1 a a
3 1 a a
4 2 b c
5 2 b c
6 2 b c
7 2 b c
8 2 b c
9 3 c a
10 3 c a
11 4 a b
12 4 a b
13 4 a b
14 4 a b
15 5 b a
16 6 c c
17 6 c c
18 6 c c
19 7 a c
20 7 a c