是否可以为每行数据创建唯一的bin?

问题描述 投票:0回答:1

我有一个数据集,其中包含多个对象的最小和最大高度。数据框如下所示:

ID Min Max  
A  30  160  
B  12  200  
C  35  171  
D  16  198 

我想在最小和最大之间划分距离,以创建3个容器” Bottom”,“ Middle”和“ Top”。我希望垃圾箱代表最小和最大之间范围的1/3。这是我的预期输出(十进制还可以,我在这里取整):

ID Bottom Middle Top   
A  30-73  74-116 117-160  
B  12-75  76-137 138-200  
C  35-80  81-125 126-171  
D  16-77  78-138 139-198

在dplyr中有办法吗?

[另外,我将使用从这些垃圾箱创建的范围与这些范围内每个唯一ID的另一个单独的跟踪粒子运动的数据集进行比较。我想知道每个粒子位于“底部”,“中间”或“顶部”的频率。有没有办法对单独的文件执行此操作,还是应该以某种方式将它们组合?

r dplyr binning
1个回答
0
投票
    library(dplyr)
    library(stringr)

    dataset <- data.frame(ID = c("A", "B", "C", "D"),
                          Min = c(30, 12, 35, 16),
                          Max = c(160, 200, 171, 198))

    datasetBins <- dataset %>%
# Getting bins limits (using floor() to make them separable)
      mutate(quater = (Max - Min) / 3) %>%
      mutate(limit2 = floor(Min + quater),
             limit3 = floor(Min + 2* quater)) %>%
# Creating bins (using +1 to make them separable)
      mutate(Bottom = str_c(Min, limit2, sep = "-"),
             Middle = str_c(limit2+1, limit3, sep = "-"),
             Top = str_c(limit3+1, Max, sep = "-")) %>%
# Droping redundant cols
      select(ID, Bottom, Middle, Top)
© www.soinside.com 2019 - 2024. All rights reserved.