R中的采样数据,如何用0替换随机选择的元素

Sampled data in R, how to replace randomly selected elements with 0

我想按概率重复我的数据集中的所有行。行中重复值的概率取决于初始行。我如何确定行中每个元素被重复的机会?

这是一个小示例数据框。

data <- data.frame(id = rep(c("01", "02", "03"),4), 
                    X1 = c(100,60,90,0,60,90,0,60,0,100,60,0),
                    X2 = c(0,60,90,0,60,0,0,0,90,0,0,90))
head(data)
  id  X1 X2
1 01 100  0
2 02  60 60
3 03  90 90
4 01   0  0
5 02  60 60
6 03  90  0

应重复第一列和值为 0 的列。 行中的数值应以 9/10 的机会重复。 (我希望新数据框具有重复的 id 列和 0 值元素)

可能的示例输出:

head(rep)
  id X1 X2
1 01  0  0
2 02 60 60
3 03 90  0
4 01  0  0
5 02  0 60
6 03 90  0

我无法在 sample() 中为行定义参数 prob=

有什么想法吗?

基本上你的问题归结为如何用 0 替换随机选择的数据元素。你可以使用 runif 非常简单地做到这一点,在这种情况下用 0 替换每个值的概率为 0.1:

set.seed(144)
data[-1] <- sapply(data[-1], function(x) ifelse(runif(length(x)) < 0.1, 0, x))
data
#    id  X1 X2
# 1  01   0  0
# 2  02  60 60
# 3  03  90 90
# 4  01   0  0
# 5  02  60 60
# 6  03  90  0
# 7  01   0  0
# 8  02  60  0
# 9  03   0 90
# 10 01 100  0
# 11 02  60  0
# 12 03   0 90

使用这个随机种子,唯一的变化是示例数据的第一行。