首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >追加列值,直到满足R中的条件

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

Stack Overflow用户
提问于 2017-01-18 13:53:28
回答 2查看 91关注 0票数 1

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

代码语言:javascript
复制
 ID  Age 
 1   10 
 2   15
 3   36
 4   20
 .   .
 .   .
497  40
498  5
499  12
500  20

在上面的dataframe中,我想添加具有值的列,这样总记录的25% (在我们的例子中是125)必须在1-3之间,其余的75%(从126开始)必须在4-10之间,这样输出看起来就像这样

代码语言:javascript
复制
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

我试过了

代码语言:javascript
复制
    function(x) {
      a= row.names(demo)[125]
     a <- FALSE
      while (!a) {

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

  }
  return(x)
}

任何帮助都是非常appreciated.Thanks的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-18 13:58:23

我们可以尝试使用repsample

代码语言:javascript
复制
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

代码语言:javascript
复制
sum(demo$colB %in% 1:3)
#[1] 121

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

数据

代码语言:javascript
复制
set.seed(24)
demo <- data.frame(ID = 1:500, Age = sample(10:99, 500, replace=TRUE))
票数 1
EN

Stack Overflow用户

发布于 2017-01-18 14:01:42

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

代码语言:javascript
复制
demo$colB <- sample(1:10, nrow(demo), prob = c(rep(0.25/3, 3), rep(0.75/7, 7)), replace=TRUE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41712293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档