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
使用这个随机种子,唯一的变化是示例数据的第一行。
我想按概率重复我的数据集中的所有行。行中重复值的概率取决于初始行。我如何确定行中每个元素被重复的机会?
这是一个小示例数据框。
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
使用这个随机种子,唯一的变化是示例数据的第一行。