【问题标题】:Appending column value till a condition is met in R追加列值直到在 R 中满足条件
【发布时间】:2017-06-02 09:51:42
【问题描述】:

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

任何帮助将不胜感激。谢谢

【问题讨论】:

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


    【解决方案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))
    

    【讨论】:

    • 是的,这对我有用 感谢您强调 set.seed :-)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 2013-12-28
      • 2021-08-24
      • 2014-05-12
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多