定义个案的 R(分层)随机抽样
R (Stratified) Random Sampling for Defined Cases
我有一个数据框:
DF <- data.frame(Value = c("AB", "BC", "CD", "DE", "EF", "FG", "GH", "HI", "IJ", "JK", "KL", "LM"),
ID = c(1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1))
我的问题:我想创建一个新列,其中包含一个(二进制)随机数('0
' 或 '1
') 对于病例 'ID' == 1
固定比例(或预定义的患病率)(例如,随机数 '0
' x 2 和 '1
' x 4).
编辑我:
对于非案例特定目的,解决方案可能是:
DF$RANDOM[sample(1:nrow(DF), nrow(DF), FALSE)] <- rep(RANDOM, c(nrow(DF)-4,4))
但是,我仍然需要特定于 cas 的分配,并且上述解决方案没有明确引用“0
”或“1
”。
(注意:变量“value
”与问题无关;只是一个标识符。)
我在 or random row selection 上找到了相关帖子 - 但这些(和其他)帖子没有涵盖这个问题。
非常感谢您。
您可以先按大小写对数据进行子集 ID == 1
。为了确保1和0的出现,我们使用rep
函数,并在sample
函数中将replace
设置为False。
这是一个解决方案。
library(data.table)
set.seed(121)
DF[ID == 1, new_column := sample(rep(c(0,1), c(2,4)), .N, replace = F)]
print(DF1)
Value ID new_column
1: AB 1 1
2: BC 0 NA
3: CD 0 NA
4: DE 1 1
5: EF 0 NA
6: FG 1 1
7: GH 1 1
8: HI 0 NA
9: IJ 0 NA
10: JK 1 0
11: KL 0 NA
12: LM 1 0
library(dplyr)
DF <- data.frame(Value = c("AB", "BC", "CD", "DE", "EF", "FG", "GH",
"HI", "IJ", "JK", "KL", "LM"),
ID = c(1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1),
stringsAsFactors = FALSE)
DF %>% group_by(ID) %>% sample_n(4, replace = FALSE)
我有一个数据框:
DF <- data.frame(Value = c("AB", "BC", "CD", "DE", "EF", "FG", "GH", "HI", "IJ", "JK", "KL", "LM"),
ID = c(1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1))
我的问题:我想创建一个新列,其中包含一个(二进制)随机数('0
' 或 '1
') 对于病例 'ID' == 1
固定比例(或预定义的患病率)(例如,随机数 '0
' x 2 和 '1
' x 4).
编辑我: 对于非案例特定目的,解决方案可能是:
DF$RANDOM[sample(1:nrow(DF), nrow(DF), FALSE)] <- rep(RANDOM, c(nrow(DF)-4,4))
但是,我仍然需要特定于 cas 的分配,并且上述解决方案没有明确引用“0
”或“1
”。
(注意:变量“value
”与问题无关;只是一个标识符。)
我在
非常感谢您。
您可以先按大小写对数据进行子集 ID == 1
。为了确保1和0的出现,我们使用rep
函数,并在sample
函数中将replace
设置为False。
这是一个解决方案。
library(data.table)
set.seed(121)
DF[ID == 1, new_column := sample(rep(c(0,1), c(2,4)), .N, replace = F)]
print(DF1)
Value ID new_column
1: AB 1 1
2: BC 0 NA
3: CD 0 NA
4: DE 1 1
5: EF 0 NA
6: FG 1 1
7: GH 1 1
8: HI 0 NA
9: IJ 0 NA
10: JK 1 0
11: KL 0 NA
12: LM 1 0
library(dplyr)
DF <- data.frame(Value = c("AB", "BC", "CD", "DE", "EF", "FG", "GH",
"HI", "IJ", "JK", "KL", "LM"),
ID = c(1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1),
stringsAsFactors = FALSE)
DF %>% group_by(ID) %>% sample_n(4, replace = FALSE)