【问题标题】:R (Stratified) Random Sampling for Defined Cases定义案例的 R(分层)随机抽样
【发布时间】:2018-03-04 18:11:45
【问题描述】:

我有一个数据框:

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”与问题无关;只是一个标识符。)

我在 stratified sampling 或 random row selection 上找到了相关帖子 - 但这些(和其他)帖子并未涵盖这个问题。

非常感谢您。

【问题讨论】:

    标签: r random sampling


    【解决方案1】:

    您可以先按大小写 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
    

    【讨论】:

    • 是的,我知道。但是:我需要一个没有先前子集的解决方案,并且您使用概率(我需要固定比例 - 没有概率)。
    • 我做了一些改动。做完 set.seed 后,prob 参数总是会生成相同数量的 1 和 0。既然你想随机生成 1 和 0,那么 1 出现 4 次,0 应该出现 2 次,这就是它的工作原理。
    • 谢谢。但是“概率”部分呢(您计算了所提供数字的比例)。但我想要修复号码。最后,当您创建一个附加列时(例如, DF_1[ID == 1, new_column_additional := sample(c(0,1), .N, replace = T, prob = c(0.33,0.67))] )结果错了。
    • 我已经通过使用代表而不是概率添加了修复。请检查。
    • 太棒了。这按预期工作。感谢您的快速回复和帮助。很好的解决方案。
    【解决方案2】:
    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)
    

    【讨论】:

    • 您的示例不起作用,因为您没有参考定义的案例。
    • 我编辑了我的答案。这是你要找的吗?
    • 谢谢。不,因为您的示例不针对具体情况。
    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多