我想以概率重复数据集中的所有行。行中重复值的概率取决于初始行。如何确定行中每个元素的重复几率?
这是一个小例子数据框。
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()
时遇到问题。
有什么想法吗?
答案 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
使用此随机种子,唯一的更改是在示例数据的第一行。