追加列值直到满足 R 中的条件

Appending column value till a condition is met in R

我有一个名为 demo 的数据框,其中包含 500 条这样的记录

 ID  Age 
 1   10 
 2   15
 3   36
 4   20
 .   .
 .   .
497  40
498  5
499  12
500  20

在上面的数据框中,我想添加具有值的列,使得总记录的 25%(在我们的例子中为 125)必须介于 1-3 和剩余之间,即 75%(从 126 开始)必须介于 4- 10,使得输出看起来像这样

ID  Age  colB
 1   10   2
 2   15   1
 3   36   1
 4   20   3
 .   .
 .   .
497  40   8
498  5    10
499  12   5
500  20   9

我试过了

    function(x) {
      a= row.names(demo)[125]
     a <- FALSE
      while (!a) {

        demo$colB <- sample(nrow(demo), c(1:3))

  }
  return(x)
}

任何帮助都会很大appreciated.Thanks

我们可以尝试 repsample

demo$colB <- sample(c(rep(1:3, length.out= ceiling(nrow(demo)*.25)), 
      rep(4:10, length.out=ceiling(nrow(demo)*.75))))[seq_len(nrow(demo))]
sum(demo$colB %in% 1:3)
#[1] 125

根据另一个post计算sum

sum(demo$colB %in% 1:3)
#[1] 121

两者都使用 set.seed(1) 计算 sample(使其可重现)

数据

set.seed(24)
demo <- data.frame(ID = 1:500, Age = sample(10:99, 500, replace=TRUE))

试试这个(假设您在 colB 中的值不依赖于其他列的值):

demo$colB <- sample(1:10, nrow(demo), prob = c(rep(0.25/3, 3), rep(0.75/7, 7)), replace=TRUE)