在R中添加列值直到满足条件

时间:2017-01-18 05:53:28

标签: r for-loop while-loop conditional calculated-columns

我有一个名为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)
}

非常感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:1)

我们可以尝试使用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

根据其他帖子计算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))

答案 1 :(得分:1)

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

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