【问题标题】:Assign a unique ID while a condition is FALSE in r在 r 中条件为 FALSE 时分配唯一 ID
【发布时间】:2020-05-11 23:02:27
【问题描述】:

我需要分配唯一的 ID,但是,除了大小减小之外,没有其他标识变量。我创建了一个 TRUE/FALSE 语句向量,并且我想在语句为 FALSE 时为每一行分配一个 ID。每次传递一个 TRUE 语句时,我都想为行分配一个新 ID,并且该 ID 在语句为 FALSE 时继续。

我的数据集样本:

     Size    index
1    8.70    FALSE
2    9.40    FALSE
3   10.00    FALSE
4   10.50    FALSE
5   11.00    FALSE
6    1.60    TRUE
7    2.20    FALSE
8    2.60    FALSE
9    3.30    FALSE
10   3.70    FALSE
11   1.10    TRUE
12   2.40    FALSE
13   2.80    FALSE
14   3.40    FALSE
15   4.90    FALSE
16   6.20    FALSE
17   1.90    TRUE
18   2.20    FALSE
19   3.30    FALSE
20   4.80    FALSE

我尝试过使用以下代码

x$index[1] <- FALSE
RandomID <- sample(100:999, size = 1000, replace = TRUE)
for(i in 1:len){
  int <- sample(RandomID,1,replace = FALSE)
  if(x$index[i] == FALSE) {
    print(int)
  }else{break}
}

【问题讨论】:

    标签: r variable-assignment data-manipulation


    【解决方案1】:

    您可以使用基础 R 中的cumsum

    x$id <- cumsum(x$index) + 1 
    x
    #   Size index id
    #1   8.7 FALSE  1
    #2   9.4 FALSE  1
    #3  10.0 FALSE  1
    #4  10.5 FALSE  1
    #5  11.0 FALSE  1
    #6   1.6  TRUE  2
    #7   2.2 FALSE  2
    #8   2.6 FALSE  2
    #9   3.3 FALSE  2
    #10  3.7 FALSE  2
    #11  1.1  TRUE  3
    #12  2.4 FALSE  3
    

    数据

    x <- structure(list(Size = c(8.7, 9.4, 10, 10.5, 11, 1.6, 2.2, 2.6, 
    3.3, 3.7, 1.1, 2.4, 2.8, 3.4, 4.9, 6.2, 1.9, 2.2, 3.3, 4.8), 
        index = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 
        FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
        TRUE, FALSE, FALSE, FALSE), id = c(1, 1, 1, 1, 1, 2, 2, 2, 
        2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4)), row.names = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
    "14", "15", "16", "17", "18", "19", "20"), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多