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

时间:2015-07-06 12:27:24

标签: r dataframe repeat random-sample

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

这是一个小例子数据框。

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

我在prob=中为行定义参数sample()时遇到问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

基本上你的问题归结为如何用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

使用此随机种子,唯一的更改是在示例数据的第一行。