假设下面的df:
df <- data.frame(id = c(1:20), x1 = rep(c(0, .35, 0, 0),5), x2 = rep(c(0.8,0.8,0,0),5))
请注意,x1的行的25%的值为0.35,x2的行的50%的值为0.8。
现在假设我想通过将那个beta随机添加到值为0的单元格中来将x1中的行数增加为0.35到75%。
另外,假设我想通过从值0.85的行中随机删除该beta来减少x2中值为0.8的行数。
我如何以编程方式做到这一点?我已经使用了很多方法,但是它们都是异常强力的,我想我会忽略一种更优雅,更有效的方法。用这个小矩阵蛮力地将它简单化是很容易的,但是,正如您可能想像的那样,实际矩阵要复杂几个数量级。
真正感谢任何想法。
如果我理解正确,那么您想随机更改一些值。也许这样的方法会奏效,如您的所示x1
。
您可以为镜像此逻辑x2
,并根据要平均随机改变多少个值来尝试概率。
library(dplyr)
# value of x1
x1_beta <- 0.35
# probability cutoff
xl_p_cutoff <- 0.5
# generate a random uniform value for each row
# if x1 is zero and the random value is above the cutoff, set as the beta value
df %>%
mutate(p_x1 = runif(n()),
new_x1 = if_else(x1 == 0 & p_x1 > xl_p_cutoff, x1_beta, x1))
上面的内容也可以组合成一行。
df %>%
mutate(x1 = if_else(x1 == 0 & runif(n()) > xl_p_cutoff, x1_beta, x1))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句