【发布时间】:2018-07-06 00:58:12
【问题描述】:
我必须在“桶”中随机填充一组“失败”值。
例如,
| Bucket | Failure | Id |
|--------|---------|----|
| B1 | F1 | 1 |
| B1 | F2 | 2 |
| B1 | F1 | 3 |
| B1 | null | 4 |
| B1 | null | 5 |
| B2 | F3 | 6 |
| B2 | F4 | 7 |
| B2 | null | 8 |
在上表中,每个 Bucket 可以包含多条记录。其中一些记录将包含失败填充,但大多数不会。我的目标是根据桶内失败的比例随机分配失败。例如,对于组合 - {B1, F1} 与 B1 记录的比例(填充失败)是 2/3 和对于 {B1, F2} B1 记录的比例(失败填充)是 1/3。
因此,B1 的 null 失败列 (Id=4,5) 的记录应该随机获得失败 F1 或 F2,但 F1 的比例为 2/3,F2 为 1/ 3.此逻辑需要应用于表中的所有存储桶。
我看到这是一件复杂的事情。我是一个 R 菜鸟,因此,任何代码示例都将不胜感激。
在这两者之间,我看到了这个问题。但是解决方案没有运行:Fill missing value based on probability of occurrence
查看示例代码:
test <- data.frame(
bucket = c(rep('B1', 5), rep('B2',3))
, failure = c('F1', 'F2', 'F1', NA, NA, 'F3', 'F4', NA)
, Id = seq(1:8)
)
test
sample_fill_na = function(x) {
x_na = is.na(x)
x[x_na] = sample(x[!x_na], size = sum(x_na), replace = TRUE)
return(x)
}
test[, failure := sample_fill_na(failure), by = bucket]
【问题讨论】:
标签: r random data.table