【问题标题】:How to group by range in r?如何在r中按范围分组?
【发布时间】:2021-01-10 04:24:26
【问题描述】:

我想将行按 200 分组。例如,我想根据最小值将最多 +200 分组为一组。下一组被分组到 +200 和下一个最小值。

这是一个数据集:

data <- data.frame(data = c(10, 110, 1011, 1622, 1822, 2311, 2373, 2388, 6233, 6433))

   data
1   10  
2   110  
3   1011 
4   1622  
5   1822          
6   2311  
7   2373           
8   2388          
9   6233   
10  6433       


data$group <- c(1, 1, 2, 3, 3, 4, 4, 4, 5, 5)

  data     group
1   10       1        #(group: 1, range:10~200)
2   110      1        
3   1011     2        #(group: 2, range:1011~1211)
4   1622     3        #(group: 3, range:1622~1822)
5   1822     3         
6   2311     4        #(group: 4, range:2311~2511) 
7   2373     4         
8   2388     4        
9   6233     5        #(group: 5, range:6233~6433) 
10  6433     5       

【问题讨论】:

    标签: r dplyr group-by


    【解决方案1】:

    这是使用 while 循环的基本 R 选项:

    data$group <- NA
    group <- 1
    min_val <- data$data[1]
    next_val <- min_val + 200  
    i <- 1
    
    while(i <= nrow(data)) {
      if(data$data[i] > next_val) {
        min_val <- data$data[i]
        next_val <- min_val + 200  
        group <- group + 1
      }
      data$group[i] <- group
      i <- i + 1
    }
    
    data
    #   data group
    #1    10     1
    #2   110     1
    #3  1011     2
    #4  1622     3
    #5  1822     3
    #6  2311     4
    #7  2373     4
    #8  2388     4
    #9  6233     5
    #10 6433     5
    

    【讨论】:

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