我有一个数据集,其中包含多个对象的最小和最大高度。数据框如下所示:
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的另一个单独的跟踪粒子运动的数据集进行比较。我想知道每个粒子位于“底部”,“中间”或“顶部”的频率。有没有办法对单独的文件执行此操作,还是应该以某种方式将它们组合?
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)