【问题标题】:Creating a table with proportional values创建具有比例值的表
【发布时间】:2022-09-23 23:51:19
【问题描述】:

我有一个如下所示的数据集:

COMPANY       DATABREACH        CYBERBACKGROUND
A             1                 2
B             0                 2 
C             0                 1
D             0                 2 
E             1                 1
F             1                 2
G             0                 2  
H             0                 2
I             0                 2
J             0                 2

不,我想创建以下内容: 40% 的 DATABREACH 列的值为 1,我希望 CYBERBACKGROUND 的值为 2。我认为必须有一些函数来执行此操作,但我找不到它。

  • 如果我理解,那么每当 DATABREACH 的值为 1 时,您希望随机覆盖(概率为 0.4)CYBERBACKGROUND 的值为 2,对吗?你是否意识到,只有“E”公司在这里有机会改变,其他公司都保持不变?
  • 这只是数据集的一部分,我有 11,000 个观察值。但是,是的,每当 DATABREACH 的值为 1 时,我想用 2 的值随机覆盖(概率为 0.4)CYBERBACKGROUND。

标签: r


【解决方案1】:
ind <- which(df$DATABREACH == 1)
ind <- ind[rbinom(length(ind), 1, prob = 0.4) > 0]
df$CYBERBACKGROUND[ind] <- 2

上面的方法效率更高一点,因为它只拉动严格要求的随机性。如果您不担心(11000 似乎不太高),您可以将其减少到

df$CYBERBACKGROUND <-
  ifelse(df$DATABREACH == 1 & rbinom(nrow(df), 1, prob = 0.4) > 0,
         2, df$CYBERBACKGROUND)

【讨论】:

    【解决方案2】:

    我们可能会使用

    library(dplyr)
    df1 <- df1 %>%
       mutate(CYBERBACKGROUND = replace(CYBERBACKGROUND,
        sample(which(DATABREACH == 0), sum(ceiling(sum(DATABREACH) * 0.4))), 2))
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多