为每个个体生成从0/1起始到20的连续唯一Dist列
解决方案
你之前用ntile出现重复值是因为它是等数量分箱工具,当观测数(31-35条)大于指定的分箱数(20)时,必然会有多个观测被分到同一箱,自然会出现重复值。要生成每个个体内唯一连续、起始为0/1且结束接近20的Dist列,直接基于每个ID的Dist_micm计算相对偏移或做线性缩放即可,以下是具体实现:
方案1:基于最小起始值计算相对偏移(保留原始间距)
这个方案会保留每个观测间的实际微米间距,仅将每个ID的起始点对齐到0或1,结束点会自然落在20左右(因为每个个体覆盖20微米)。
起始为0
library(dplyr) df <- df %>% group_by(ID) %>% mutate(Dist = Dist_micm - min(Dist_micm)) %>% ungroup()
起始为1
library(dplyr) df <- df %>% group_by(ID) %>% mutate(Dist = Dist_micm - min(Dist_micm) + 1) %>% ungroup()
方案2:线性缩放至严格0-20或1-20范围
如果希望结束点严格落在20(不管原始观测的实际总间距是否刚好20微米),可以用线性缩放把每个ID的Dist_micm映射到指定区间:
缩放至0-20
library(dplyr) library(scales) df <- df %>% group_by(ID) %>% mutate(Dist = rescale(Dist_micm, to = c(0, 20))) %>% ungroup()
缩放至1-20
library(dplyr) library(scales) df <- df %>% group_by(ID) %>% mutate(Dist = rescale(Dist_micm, to = c(1, 20))) %>% ungroup()
以上两种方案生成的Dist列都能满足:每个ID内数值唯一连续、起始符合要求、结束接近或等于20,完全适配统一绘图的需求。
内容的提问来源于stack exchange,提问作者watermineporcupine
相关产品推荐
相关产品推荐

