r - 在随机选择的行中更改 R 数据框中的值
问题描述
假设下面的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))
推荐阅读
- tensorflow - 如何克服错误的尺寸问题
- vue.js - 我的 Vue“wheel.vue”组件有什么问题?当它呈现为 html 时,它显示为空?
- google-apps-script - 如何在列中生成下一个可用的点十进制符号数
- python - 如何在opencv中替换部分图像?
- python - Tensorflow-gpu 在拟合模型时不使用 GPU
- xml - 如何使用 XSLT 添加子元素?
- flutter - 摆脱 Flutter 中的黄黑线
- python - 如何在 Tensorflow 1.x 中的训练期间打印值
- windows - 在 winfoms 中添加广告组成员
- java - 上下文中 Spark 作业的实际运行时间