首页 > 解决方案 > 在随机选择的行中更改 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 的行数。

我怎样才能以编程方式做到这一点?我玩过很多方法,但它们都是非常蛮力的,我想我忽略了一种更优雅、更有效的方法。使用这个小矩阵很容易暴力破解它,但是,正如您可能想象的那样,真正的矩阵要复杂几个数量级。

真的很感激任何想法。

标签: rtidyverse

解决方案


如果我理解正确,您想随机更改一些值。也许像这样的方法会起作用,为您的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))

推荐阅读