如何从随机选择中排除值
How to exclude values from random selection
这是独立的,但与这个问题有关
使用 mtcars
数据集,我现在设法从特定列中随机 select 一个值:在本例中来自 cyl
列。
mtcars[sample(1:nrow(mtcars), 1),2]
此码随机赠送
[1] 6
或 [1] 8
或 ...
现在我想排除一个要选择的特定值,在这个例子中说cyl==8
。
我会将值存储在一个向量中,例如:
not_select <- 8
mtcars[sample(1:nrow(mtcars), 1),2]
我的问题:如何将 not_select
集成到 mtcars[sample(1:nrow(mtcars), 1),2]
预期输出:随机样本不应包括 8
更新:
例如输出应该是:
6
或 4
由于情况不明更新二:
我想从 cyl
列中随机 select 一个值。此值不应为 8
。所以该值将是 4
或 6
.
解释:8
是正确答案。我正在用 cyl
列中的其他值(例如 4 和 6)随机构造错误答案。
能不能根据not_select加个过滤条件?
mtcars[sample(1:nrow(mtcars), 1) & mtcars$cyl != not_select, 2]
更新:怎么样:
not_select <- 8
draw_cyl <- sample(unique(mtcars$cyl[mtcars$cyl != not_select]), 1)
mtcars %>%
filter(cyl == draw_cyl) %>%
slice_sample(n = 1) %>%
pull(cyl)
或者按照 TarJae 自己的建议(所以我没有任何功劳!):
mtcars[sample(which (mtcars[,2] != not_select), 1), 2]
如果输出匹配not_selected
,这个递归函数将再次运行。
exclude_not_selected <- function(not_selected) {
value <- mtcars[sample(1:nrow(mtcars), 1),2]
if (value == not_selected) {
exclude_not_selected(not_selected)
} else {
return(value)
}
}
exclude_not_selected(8)
[1] 4
也许,另一种方式-
tmp <- mtcars[, 2]
sample(tmp[tmp != not_select], 1)
以上给出了根据每个值在数据集中的出现来选择每个值的概率。如果您希望无论发生多少次概率都相等,您可以只考虑 unique
个值。
tmp <- unique(mtcars[, 2])
sample(tmp[tmp != not_select], 1)
这是独立的,但与这个问题有关
使用 mtcars
数据集,我现在设法从特定列中随机 select 一个值:在本例中来自 cyl
列。
mtcars[sample(1:nrow(mtcars), 1),2]
此码随机赠送
[1] 6
或 [1] 8
或 ...
现在我想排除一个要选择的特定值,在这个例子中说cyl==8
。
我会将值存储在一个向量中,例如:
not_select <- 8
mtcars[sample(1:nrow(mtcars), 1),2]
我的问题:如何将 not_select
集成到 mtcars[sample(1:nrow(mtcars), 1),2]
预期输出:随机样本不应包括 8
更新:
例如输出应该是:
6
或 4
由于情况不明更新二:
我想从 cyl
列中随机 select 一个值。此值不应为 8
。所以该值将是 4
或 6
.
解释:8
是正确答案。我正在用 cyl
列中的其他值(例如 4 和 6)随机构造错误答案。
能不能根据not_select加个过滤条件?
mtcars[sample(1:nrow(mtcars), 1) & mtcars$cyl != not_select, 2]
更新:怎么样:
not_select <- 8
draw_cyl <- sample(unique(mtcars$cyl[mtcars$cyl != not_select]), 1)
mtcars %>%
filter(cyl == draw_cyl) %>%
slice_sample(n = 1) %>%
pull(cyl)
或者按照 TarJae 自己的建议(所以我没有任何功劳!):
mtcars[sample(which (mtcars[,2] != not_select), 1), 2]
如果输出匹配not_selected
,这个递归函数将再次运行。
exclude_not_selected <- function(not_selected) {
value <- mtcars[sample(1:nrow(mtcars), 1),2]
if (value == not_selected) {
exclude_not_selected(not_selected)
} else {
return(value)
}
}
exclude_not_selected(8)
[1] 4
也许,另一种方式-
tmp <- mtcars[, 2]
sample(tmp[tmp != not_select], 1)
以上给出了根据每个值在数据集中的出现来选择每个值的概率。如果您希望无论发生多少次概率都相等,您可以只考虑 unique
个值。
tmp <- unique(mtcars[, 2])
sample(tmp[tmp != not_select], 1)